Laravel 8:多选选项不发送数据

问题描述

我在 db 有两个表,其中一个名为 users,其中仅包含网站的用户信息,另一个tags,其中包含一些用户可以从中选择的主题标签。>

(就像 Stackoverflow 一样,用户可以选择多个标签,例如 PHPjavascript 等)

所以为了在这两者之间建立这种关系,我将其添加User 模型中:

public function tags()
    {
        return $this->belongsToMany(Tag::class);
    }

还有这个 Tag 模型:

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

这是刀片上的选择选项,用户可以从数据库中选择多个标签

<select class="form-control BSinaBold" name="skills[]" id="skills" multiple>
    @foreach(\App\Models\Tag::all() as $tag)
        <option value="{{ $tag->id }}" {{ in_array($tag->id,Auth::user()->tags->pluck('id')->toArray()) ? 'selected' : '' }}>{{ $tag->name }}</option>
    @endforeach
</select>

然后在控制器中,我添加了这个以更新 tags 表中的数据:

public function update(Request $request,$profile)
{
    $validate_data = Validator::make($request->all(),[
        'job' => 'nullable','stackoverflow' => 'nullable','github' => 'nullable','instagram' => 'nullable','linkedin' => 'nullable','website' => 'nullable','location' => 'nullable','skills' => 'array',]);

    $user = User::findOrFail($profile);

    $user->update([
        'job' => request('job'),'stackoverflow' => request('stackoverflow'),'github' => request('github'),'instagram' => request('instagram'),'linkedin' => request('linkedin'),'website' => request('website'),'location' => request('location'),]);

    $user->tags()->sync(request('skills'));

    $user->save();

    return view('profile');
}

它运行良好且完美,但唯一的问题是这一行,它不会同步 tags 表中的数据:

$user->tags()->sync(request('skills'));

所以我尝试调试,我发现 request('skills') 是空的!

那么问题来了,为什么它不向控制器发送任何数据?

我真的很感激你们的任何想法或建议......

提前致谢。

解决方法

我认为您定义的模型关系是错误的。 标签模型应该是:

      public function user()
      {
         return $this->belongsTo(User::class);
      }

和用户模型关系:

      public function tags()
       {
          return $this->hasMany(Tag::class);
       }
    

如果您的目标是建立一对多关系。