我创建三个表:
后表
id- title-body
标签表
id--名称
POST_TAG
post_id--tag_id
邮政模型
public function tags()
{
return $this->belongsToMany('AppTag');
}
标签模型
public function posts()
{
return $this->belongsToMany('AppPost');
}
这是许多与许多关系
我想在更新帖子时添加新帖子和更新标签时存储标签,并且我使用bootstrap-tagsinput插件,用于添加帖子,我使用此方法存储新标签:
public function storeTags($post, $tags)
{
$tagInputArr = explode(',', $tags);
$tagArr = [];
foreach ($tagInputArr as $tag) {
$tagArr[] = new Tag(['name' => $tag]);
}
$post->tags()->saveMany($tagArr);
}
$ post是新的帖子对象,$ tags是$请求的标签字符串。
对于更新帖子,我有一个问题,当我查看"编辑帖子"页面时,从数据库中选择默认标签,如果我想添加新标签,Storetags方法不起作用。
在storeTags()
$post->save();
if (isset($request->tags)) {
$post->tags()->sync($request->tags, false);
} else {
$post->tags()->sync(array());
}
在updateTags()
$post->save();
if (isset($request->tags)) {
$post->tags()->sync($request->tags);
} else {
$post->tags()->sync(array());
}
在您的html文件中的标签文件中,使用此
<select class="form-control select2-multi" name="tags[]" multiple="multiple">
@foreach ($tags as $tag)
<option value="{{ $tag->id }}">{{ $tag->name }}</option>
@endforeach
</select>
在sync()
方法中,有一个区别不需要第二个参数。
我建议您观看标签的整个播放列表