我创建了3个表
articles : id title
category: id name
article_category: id article_id category_id main
在Category
模型中:
public function articles()
{
return $this->belongsToMany(Article::class);
}
我想将数据添加到article_category
:
$article_id = 20;
$category_id = 1;
$category = Category::find($category_id);
$cat[$article_id] = ['main'=>false];
$category ->articles()->sync($cat);
$article_id = 20;
$category_id = 2;
$category = Category::find($category_id);
$cat[$article_id] = ['main'=>false];
$category ->articles()->sync($cat);
现在在article_category
我有:
article_id category_id main
20 1 false
20 2 false
好的看起来很正常。
例如,如果再次添加:
$article_id = 20;
$category_id = 2;
$category = Category::find($category_id);
$cat[$article_id] = ['main'=>false];
$category ->articles()->sync($cat);
它不会生成重复行。
现在我的问题是:
如果我添加一个新的article_id,它会删除所有上次保存的记录。
例如添加这些代码:
$article_id = 21;
$category_id = 1;
$category = Category::find($category_id);
$cat[$article_id] = ['main'=>false];
$category ->articles()->sync($cat);
$article_id = 21;
$category_id = 2;
$category = Category::find($category_id);
$cat[$article_id] = ['main'=>false];
$category ->articles()->sync($cat);
我希望如此:
article_id category_id main
20 1 false
20 2 false
21 1 false
21 2 false
但在我的数据库中,我有这个:
article_id category_id main 21 1假 21 2假
我错了什么?
答案 0 :(得分:1)
根据Laravel 5.6中的文档, 将从中间表 中删除不在给定数组中的任何ID。它只会为category_id创建多对多的关系,其中$ cat变量包含其各自的id。
这就是为什么它会在添加新文章时删除所有上次保存的记录。
如果您想附加新关系,只需使用
即可 $category->articles()->syncWithoutDetaching($cat);