问题描述
我在 db 有两个表,其中一个名为 users
,其中仅包含网站的用户信息,另一个是 tags
,其中包含一些用户可以从中选择的主题标签。>
(就像 Stackoverflow 一样,用户可以选择多个标签,例如 PHP、javascript 等)
所以为了在这两者之间建立这种关系,我将其添加到 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);
}
如果您的目标是建立一对多关系。