Ad

Laravel 5.7 Many To Many Sync() Not Working

- 1 answer

I have a intermediary table in which I want to save sbj_type_id and difficulty_level_id so I have setup this:

$difficulty_level = DifficultyLevel::find(5);
if ($difficulty_level->sbj_types()->sync($request->hard, false)) {
    dd('ok');
}
else {
    dd('not ok');
}

Here is my DifficultyLevel.php:

public function sbj_types() {
     return $this->belongsToMany('App\SbjType');
}

and here is my SbjType.php:

public function difficulty_levels() {
    return $this->hasMany('App\DifficultyLevel');
}

In the above code I have dd('ok') it's returning ok but the database table is empty.

Ad

Answer

Try to change

return $this->hasMany('App\DifficultyLevel'); 

to

return $this->belongsToMany('App\DifficultyLevel');

The sync() method takes an array with the id's of the records you want to sync as argument to which you can optionally add intermediate table values. While sync($request->hard, false) doesn't seem to throw an exception in your case, I don't see how this would work.

Try for example:

$difficulty_level->sbj_types()->sync([1,2,3]);

where 1,2,3 are the id's of the sbj_types.

You can read more about syncing here.

Ad
source: stackoverflow.com
Ad