mercredi 11 avril 2018

laravel 5.6: Many to Many relationship sync

I create 3 tables

articles : id title

category: id name

article_category:  id article_id category_id main

And in Category model:

public function articles()
{
    return $this->belongsToMany(Article::class);
}

I want add data to 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);

Now In article_category I have:

article_id    category_id   main
20              1           false
20              2           false

Ok It seems normal.

for example if add this again:

$article_id = 20;
$category_id = 2;
$category = Category::find($category_id);
$cat[$article_id] = ['main'=>false];
$category ->articles()->sync($cat);

It not generate duplication rows.

Now my problem is this:

If I add a new article_id, It remove all last saved records.

for example with add these codes:

$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);

I expect this:

article_id    category_id   main
20              1           false
20              2           false
21              1           false
21              2           false

But In my databse I have this:

article_id category_id main 21 1 false 21 2 false

what's my wrong?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire