Php laravel 5.6:多对多关系同步
我创建了3个表Php laravel 5.6:多对多关系同步,php,laravel,laravel-5,many-to-many,Php,Laravel,Laravel 5,Many To Many,我创建了3个表 articles : id title category: id name article_category: id article_id category_id main 在类别中型号: public function articles() { return $this->belongsToMany(Article::class); } 我想将数据添加到文章\u类别: $article_id = 20; $category_id = 1; $catego
articles : id title
category: id name
article_category: id article_id category_id main
在类别中
型号:
public function articles()
{
return $this->belongsToMany(Article::class);
}
我想将数据添加到文章\u类别
:
$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_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);
它不会生成重复行
现在我的问题是:
如果我添加一个新的项目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
但在我的数据库中,我有:
物品_id类别_id主
21.1错误
21.2错误
我怎么了?根据中的文档,不在给定数组中的任何ID都将从中间表中删除。它只会为$cat变量包含其各自id的类别_id建立多对多关系 这就是为什么在添加新文章时会删除所有上次保存的记录 如果要附加新关系,只需使用
$category->articles()->syncWithoutDetaching($cat);