Laravel 8: 多个 Select 选项不发送数据
Laravel 8: Multiple Select Option Does Not Send Data
我在 db 有两个 table,其中一个名为 users
,它仅包含网站的用户信息,另一个名为 tags
,其中包含一些用户的主题标签可以从中选择。
(就像 Whosebug 一样,用户可以 select 多个标签,例如 php、javascript等)
所以为了在这两者之间建立这种关系,我将这个添加到 User
模型中:
public function tags()
{
return $this->belongsToMany(Tag::class);
}
还有这个给 Tag
型号:
public function users()
{
return $this->belongsToMany(User::class);
}
这里是 blade 上的 select 选项,用户可以 select 来自数据库的多个标签:
<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>
然后在 Controller 中,我添加了这个以便在 tags
table:
更新数据
public function update(Request $request, $profile)
{
$validate_data = Validator::make($request->all(),[
'job' => 'nullable',
'Whosebug' => 'nullable',
'github' => 'nullable',
'instagram' => 'nullable',
'linkedin' => 'nullable',
'website' => 'nullable',
'location' => 'nullable',
'skills' => 'array',
]);
$user = User::findOrFail($profile);
$user->update([
'job' => request('job'),
'Whosebug' => request('Whosebug'),
'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
table:
同步数据
$user->tags()->sync(request('skills'));
所以我尝试调试,发现 request('skills')
是空的!
那么问题来了,为什么它不向Controller发送任何数据?
非常感谢你们的任何想法或建议...
提前致谢。
我认为您对模型关系的定义有误。
标记模型应为:
public function user()
{
return $this->belongsTo(User::class);
}
与用户模型关系:
public function tags()
{
return $this->hasMany(Tag::class);
}
如果您的目标是建立一对多关系。
我在 db 有两个 table,其中一个名为 users
,它仅包含网站的用户信息,另一个名为 tags
,其中包含一些用户的主题标签可以从中选择。
(就像 Whosebug 一样,用户可以 select 多个标签,例如 php、javascript等)
所以为了在这两者之间建立这种关系,我将这个添加到 User
模型中:
public function tags()
{
return $this->belongsToMany(Tag::class);
}
还有这个给 Tag
型号:
public function users()
{
return $this->belongsToMany(User::class);
}
这里是 blade 上的 select 选项,用户可以 select 来自数据库的多个标签:
<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>
然后在 Controller 中,我添加了这个以便在 tags
table:
public function update(Request $request, $profile)
{
$validate_data = Validator::make($request->all(),[
'job' => 'nullable',
'Whosebug' => 'nullable',
'github' => 'nullable',
'instagram' => 'nullable',
'linkedin' => 'nullable',
'website' => 'nullable',
'location' => 'nullable',
'skills' => 'array',
]);
$user = User::findOrFail($profile);
$user->update([
'job' => request('job'),
'Whosebug' => request('Whosebug'),
'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
table:
$user->tags()->sync(request('skills'));
所以我尝试调试,发现 request('skills')
是空的!
那么问题来了,为什么它不向Controller发送任何数据?
非常感谢你们的任何想法或建议...
提前致谢。
我认为您对模型关系的定义有误。 标记模型应为:
public function user()
{
return $this->belongsTo(User::class);
}
与用户模型关系:
public function tags()
{
return $this->hasMany(Tag::class);
}
如果您的目标是建立一对多关系。