Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多对多关系在laravel中存储和更新_Php_Mysql_Laravel_Laravel 5 - Fatal编程技术网

Php 多对多关系在laravel中存储和更新

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

我创建了三个表:

邮政桌 id—标题—正文

标签表 id—名称

邮政标签 post_id—标记_id

后模型 标签模型 这是一种多对多关系

我想在添加新帖子时存储标签,在更新帖子时更新标签,我使用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是新的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>