Php 多对多关系在laravel中存储和更新
我创建了三个表: 邮政桌 id—标题—正文 标签表 id—名称 邮政标签 post_id—标记_id 后模型 标签模型 这是一种多对多关系 我想在添加新帖子时存储标签,在更新帖子时更新标签,我使用bootstrap tagsinput插件,对于添加帖子,我使用此方法存储新标签:Php 多对多关系在laravel中存储和更新,php,mysql,laravel,laravel-5,Php,Mysql,Laravel,Laravel 5,我创建了三个表: 邮政桌 id—标题—正文 标签表 id—名称 邮政标签 post_id—标记_id 后模型 标签模型 这是一种多对多关系 我想在添加新帖子时存储标签,在更新帖子时更新标签,我使用bootstrap tagsinput插件,对于添加帖子,我使用此方法存储新标签: public function storeTags($post, $tags) { $tagInputArr = explode(',', $tags); $tagArr = []; foreac
public function storeTags($post, $tags)
{
$tagInputArr = explode(',', $tags);
$tagArr = [];
foreach ($tagInputArr as $tag) {
$tagArr[] = new Tag(['name' => $tag]);
}
$post->tags()->saveMany($tagArr);
}
$post是新的post对象,$tags是$request中的标记字符串
对于更新帖子,我遇到了一个问题,当我查看编辑帖子页面时,默认标签是从数据库中选择的,如果我想添加新标签,storeTags方法不起作用。尝试在
storeTags()中这样做。
在updateTags()中
在标记的html文件中,使用以下命令
<select class="form-control select2-multi" name="tags[]" multiple="multiple">
@foreach ($tags as $tag)
<option value="{{ $tag->id }}">{{ $tag->name }}</option>
@endforeach
</select>
@foreach($tags作为$tag)
{{$tag->name}
@endforeach
不同之处在于,在更新的sync()
方法中不需要第二个参数。
我建议你使用标签创建的整个播放列表sync方法的参数是标签的id,但是$request->tags是标签的名称对不起,也许我的问题不够清楚,我想做的是在添加新帖子时删除或添加标签。就像wordpress的标签CRUD。@ChenLee你想知道如何删除标签吗,所有标记都是在我添加新帖子或更新现有帖子时创建的,但如果我想在更新现有帖子时添加新标记或删除现有标记,我如何使用sync编写方法。
public function storeTags($post, $tags)
{
$tagInputArr = explode(',', $tags);
$tagArr = [];
foreach ($tagInputArr as $tag) {
$tagArr[] = new Tag(['name' => $tag]);
}
$post->tags()->saveMany($tagArr);
}
$post->save();
if (isset($request->tags)) {
$post->tags()->sync($request->tags, false);
} else {
$post->tags()->sync(array());
}
$post->save();
if (isset($request->tags)) {
$post->tags()->sync($request->tags);
} else {
$post->tags()->sync(array());
}
<select class="form-control select2-multi" name="tags[]" multiple="multiple">
@foreach ($tags as $tag)
<option value="{{ $tag->id }}">{{ $tag->name }}</option>
@endforeach
</select>