Home » Php » php – sync or updateExistingPivot with Laravel — How to fill based on a 3rd critria

php – sync or updateExistingPivot with Laravel — How to fill based on a 3rd critria

Posted by: admin July 12, 2020 Leave a comment

Questions:

Here is the thing, I have 3 tables, users / users_types / types.

I have a belongToMany between users and types through users_types, the pivot with a few infos in it.
One of them being the line number in a form.
I am trying to update the table based on the userID and the line number but NOT on the typeID, the latter being filled by my inputs.

How can I make it happen?
I have been trying

updateExistantPivot($line_number->line_number,array(
                                                        'type_id'  => $type_id,
                                                        'etc'             => $etc,
                                                        'duration'          => $duration
                                                    )
                                                );

But obviously it will not worked since it wants the typeID instead of the line_number… I always want to update the same line_number & userID. (I am in a for loop for every lines).

Thanks for your help!

oh, and I did try with a sync… but it gives me a foreign key error because it sends numbers that are not supposed to be there.

How to&Answers:

If you want to update existing pivot, you can do this:

$model; // parent of the relation
$related; // related object already synced with the $model

$model->relation()->sync([$related->id => [ 'duration' => 'someValue'] ], false);

1st param is array with related model id as key, and array of pivot values to update, while 2nd param set to false means, that you don’t detach all the other related models.