当前位置: 首页 > 知识库问答 >
问题:

Laravel7如何自定义RegisterController以在用户选择时保存多个数据

林浩漫
2023-03-14

我是Laravel的新手,我需要你的帮助。

我用的是Laravel 7我的数据库中有3个表。

  1. 用户保存注册用户
  2. 在前端显示我提供给他们选择的类别(多个)
  3. 在用户注册后收集用户id和类别id的供应商\u Cat

这是我的模特们


public function users(){
        return $this->BelongsToMany(User::class);
    }

public function categories(){
        return $this->BelongsToMany(Categories::class);
    }

下面这个是我的供应商分类模型

protected $fillable = [
    'category_id',
    'vendor_id'
];

这是Laravel注册控制器

   protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
            'tel' => $data['tel'],
            'lineid'=> isset($data['lineid']) ? $data['lineid'] : null,
        ]);

我的前端代码(仅供用户选择的类别)


                        @if($categories->count()>0)
                        <div class="form-row">
                            <label class="form-row-inner">
                            <select class="selectpicker col-sm-12 md-12" id="selectpicker"  name="categories[]" multiple data-live-search="true" data-selected-text-format="count" data-count-selected-text="Selected Categories({0})" title="Choose your catories" aria-expanded="false" aria-haspopup="true" required>
                            @foreach ($categories as $categories)
                            <option class="com-sm-4 md-4" aria-expanded="false" value="{{$categories->id}}"
                                @if (isset($user))
                                  @if($user->hasCat($catgories->id))
                                      selected
                                  @endif
                                @endif
                                ><strong>{{Str::limit($categories->name,51)}}</strong></option>
                            @endforeach
                            </select>
                            @error('category_id')
                            <span class="invalid-feedback-detail" role="alert">
                                <strong>{{ $message }}</strong>
                            </span>
                            @enderror
                        </div>
                        @endif

完整注册表格代码

                <form class="form-detail col-xs-12 sm-12" action="{{ route('register') }}" method="post">
                    @csrf
                    <div class="tabcontent" id="sign-up">
                        <div class="form-row">
                            <label class="form-row-inner">
                                <input type="text" id="full_name" class="input-text @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>
                                <span class="label">Full Name</span>
                                @error('name')
                                <span class="invalid-feedback-detail" role="alert">
                                    <strong>{{ $message }}</strong>
                                </span>
                                @enderror
                                  <span class="border"></span>
                            </label>
                        </div>
                        <div class="form-row">
                            <label class="form-row-inner">
                                <input type="text" id="your_email" class="input-text @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
                                <span class="label">E-Mail</span>
                                @error('email')
                                <span class="invalid-feedback-detail" role="alert">
                                    <strong>{{ $message }}</strong>
                                </span>
                                @enderror
                                <span class="border"></span>
                            </label>
                        </div>
                        <div class="form-row">
                            <label class="form-row-inner">
                                <input type="text" id="yournumber" class="input-text @error('tel') is-invalid @enderror" name="tel" required autocomplete="new-password">
                                <span class="label">Telephone Number</span>
                                @error('tel')
                                <span class="invalid-feedback-detail" role="alert">
                                    <strong>{{ $message }}</strong>
                                </span>
                                @enderror
                                <span class="border"></span>
                            </label>
                        </div>
                        <div class="form-row">
                            <label class="form-row-inner">
                                <input type="password" name="password" id="password" class="input-text @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
                                <span class="label">Password</span>
                                @error('password')
                                <span class="invalid-feedback-detail" role="alert">
                                    <strong>{{ $message }}</strong>
                                </span>
                                @enderror
                                <span class="border"></span>
                            </label>
                        </div>
                        <div class="form-row">
                            <label class="form-row-inner">
                                <input type="password" id="comfirm_password" class="input-text" name="password_confirmation" required autocomplete="new-password">
                                <span class="label">Confirm Password</span>
                                <span class="border"></span>
                            </label>
                        </div>
                        <div class="form-row">
                            <label class="form-row-inner">
                                <input type="text" id="comfirm_password_1" class="input-text @error('lineid') is-invalid @enderror" name="lineid" required autocomplete="new-password">
                                <span class="label">Line Id</span>
                                @error('lineid')
                                <span class="invalid-feedback-detail" role="alert">
                                    <strong>{{ $message }}</strong>
                                </span>
                                @enderror
                                <span class="border"></span>
                            </label>
                        </div>
                        @if($categories->count()>0)
                        <div class="form-row">
                            <label class="form-row-inner">
                            <select class="selectpicker col-sm-12 md-12" id="selectpicker"  name="categories[]" multiple data-live-search="true" data-selected-text-format="count" data-count-selected-text="หมวดหมู่ที่เลือก ({0} หมวดหมู่)" title="เลือกหมวดหมู่ที่ให้บริการ" aria-expanded="false" aria-haspopup="true" required>
                            @foreach ($categories as $categories)
                            <option class="com-sm-4 md-4" aria-expanded="false" value="{{$categories->id}}"
                                @if (isset($user))
                                  @if($user->hasCat($catgories->id))
                                      selected
                                  @endif
                                @endif
                                ><strong>{{Str::limit($categories->name,51)}}</strong></option>
                            @endforeach
                            </select>
                            @error('category_id')
                            <span class="invalid-feedback-detail" role="alert">
                                <strong>{{ $message }}</strong>
                            </span>
                            @enderror
                        </div>
                        @endif
                     <div class="form-row-last">
                        <input type="submit" name="register" class="register">
                     </div>
                    </div>
                </form>

如果我想在选择用户后保存使用@foreach在注册表中显示的类别ID。我该怎么办?

这是我以前试过的东西

protected function create(array $data){
        $user = User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
            'tel' => $data['tel'],
            'lineid'=> isset($data['lineid']) ? $data['lineid'] : null,
        ]);

    $vendor_cat = VendorCat::create([
            'category_id' => $data['category'],
            'vendor_id' => $user->id
        ]);

    return $user;
}

这是解释图片点击这里

谢谢你,

p、 对不起,我的英语不好。

共有1个答案

钱经赋
2023-03-14

在您的RegisterController中添加registered方法,以覆盖来自您的RegisterUsers特性的register方法。还添加使用照亮\Http\Request 在您的RegisterController中。

protected function create(array $data)
{
        // .... your create method in RegisterController
}
protected function registered( Request $request, $user )
{
    VendorCat::create([
            'category_id' => $request['category'],
            'vendor_id' => $user->id
        ]);
}

编辑:

当您将类别作为数组时,您可以简单地存储所有由逗号分隔的键,或者为每个值单独存储它们,

foreach($request['categories'] as $category){
    VendorCat::create([
            'category_id' => $category,
            'vendor_id' => $user->id
        ]);
}

它将为具有相同供应商id的3个不同类别id创建3列。

VendorCat::create([
            'category_id' => is_array($request['categories']) ? implode(",",$request['categories']) : $request['categories'],
            'vendor_id' => $user->id
        ]);

 类似资料:
  • 我正在使用node.sdk、stormpath、express.js和passport.js为我的新网站制作一个用户帐户系统。所以我设置了一个自定义数据槽的帐户。我想知道,当他们注销时,我如何将新数据发布到这个自定义数据槽中,并在他们登录时检索它。我对使用node是新手,我不知道在他们登录时,我的代码应该放在哪里,也不知道如何访问“用户”帐户信息。据我所知,Passport.js正在处理身份验证,

  • 如何在Android中创建一个自定义数据选择器,比如日期选择器,这样我就可以通过自定义输入或使用按钮来获取数据(int数据)(- 我想这样做 我想要像这样的图像-- 这是Android中日期选择器的示例:-

  • 问题内容: 我在数据库中进行了一系列测试和案例。每当测试过时时,它都会被注明过期日期,并且该测试的任何子案例也应注明过期日期。我看到两种方法可以做到这一点: 1)将保存功能修改为结束日期子案例。 2)创建一个接收器,侦听正在保存的测试模型,然后结束其子案例的日期。 有什么理由要使用另一个? 编辑: 我看到这篇博客文章建议每当您检查模型的给定值时都使用save方法。由于我正在检查end_date,也

  • 问题内容: 我正在使用Dropwizard 0.9.2,我想创建一个资源,该资源不需要GET身份验证,而需要POST基本身份验证。 我努力了 与 这似乎导致对“ / protectedPing”的所有请求都需要基本身份验证。 在Dropwizard 0.9.2中,文档说如果我有一个受保护的资源,则创建一个自定义过滤器。我以为我需要这样做,但是我不知道从哪里开始,或者我是否真的需要做些什么。 问题答

  • 我应该保存用户在注册时所做的选择,然后根据用户选择的性别使用它来创建一个自定义标记以在谷歌地图上使用。所以我需要记住所做的选择。我该怎么做? 注册活动

  • > 总结一下问题:我试图了解如何以特定的方式自定义html5日期选择器,具体来说,格式类似于8月31日星期二的[日历图标],右侧带有插入符号,可以打开日期选择器。经过初步搜索,我找到了这些用于自定义日期输入文本框的伪元素。 预期的结果是,这些定制选项在大多数情况下都可以满足定制日期选择器的要求,但到目前为止,我还无法应用这些选项来完全满足目标。例如,我试图去掉文本框中的第二个正斜杠(31之后的代码