Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.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 5.6:多对多关系同步_Php_Laravel_Laravel 5_Many To Many - Fatal编程技术网

Php laravel 5.6:多对多关系同步

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

我创建了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;
$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);