We have moved our forum to GitHub Discussions. For questions about Phalcon v3/v4/v5 you can visit here and for Phalcon v6 here.

Many-to-Many relation update

What should happen when m-n relation is updated? For example

// $a->hasManyToMany(..."B"...);
$a = new A();
$b = new B();
$a->bs = array($b);
// Ok, lets say we have a connection in the DB
// However I have to save b manually, otherwise it doesn't work
// Now, what if I do this
$b2 = new B();
$a->bs = array($b2);

What I expect to happen: remove a-b connection, b itself remains in the DB, b2 is created in DB with the new link a-b2. What really happens: a now has 2 connections, to b and b2

Is this a bug, or do I need to remove it myself? What is the best way to "disconnect" A and B entries?


Connections are get as shared from the di, so every model use the same connection no matter how many saves you do.


Either you didn't quite understand my question, or I didn't understand the answer. What I'm talking about is: list of related objects is not updated, new objects are added, old are not removed. E.g. I want to update posts' tags in a blog.

$post->tags = $oldTags;
$post->tags = $newTags;

What I receive at the and is both, old and new tags, when I would like to only have new! Am I wrong with such expectations?


Some case here.


Well, I ended up using this:


$this->db->begin(); // for transaction
$a->AtoB->delete(); // remove connection
$a->B = array(new B(), new B());

So, I define relation to middle-model and remove all of them prior to saving new ones. Don't forget to use transaction, so that if saving related entities fails you can rollback to your old a-to-b connections.

edited Dec '15

hi. when phalcon automaticaly add data to middle-model on adding data why did not correct them on update? is this a bug? i have this problem. i think all solutions for this case are not very clean. all of them are solving a case temporary.