If I have a many-to-many relationship it's super easy to update the relationship with its sync
method.
But what would I use to synchronize a one-to-many relationship?
posts
: id, name
links
: id, name, post_id
Here, each Post
can have multiple Link
s.
I'd like to synchronize the links associated with a specific post in the database, against an inputted collection of links (for example, from a CRUD form where I can add, remove, and modify links).
Links in the database that aren't present in my input collection should be removed. Links that exist in the database and in my input should be updated to reflect the input, and links that are only present in my input should be added as new records in the database.
To summarize the desired behavior:
Unfortunately there is no sync
method for one-to-many relations. It's pretty simple to do it by yourself. At least if you don't have any foreign key referencing links
. Because then you can simple delete the rows and insert them all again.
$links = array(
new Link(),
new Link()
);
$post->links()->delete();
$post->links()->saveMany($links);
If you really need to update existing one (for whatever reason) you need to do exactly what you described in your question.