我是Symfony和Doctrine的新手。
我有一个实体“User”和一个实体“Type”。一个用户可以有一个喜欢的类型,而一个类型可以有许多用户将该特定类型作为喜欢。因此,我需要一个多(用户)对一(类型)的关系。
我已经实现了它,并且它工作得很好(大部分情况下)。但有一件事我不明白。
如果我这样做,它就可以工作:
$user = new User();
$type = new Type();
$user->setFavoriteType($type);
$em->persist($user);
$em->persist($type);
$em->flush();
对象被生成并存储到数据库中,favorite_type_id 被正确设置。因此,改变拥有方的位置能够正常工作。但是,如果仅将用户添加到反向方,并刷新实体管理器,则不会设置 favorite_type_id。
$user = new User();
$type = new Type();
$type->getUsers()->add($user); //same with $type->addUser($user);
$em->persist($user);
$em->persist($type);
$em->flush();
为什么呢?它为什么不能从反向方向工作?我真的必须手动设置吗?如果我在类型实体中操纵addUser方法,像"$user->setFavoriteType($this)",它就会工作。但难道这不应该是doctrine的任务吗?
文档说明如下:
当双向关联被更新时,Doctrine只检查其中一个方向进行这些更改。这被称为拥有方的关联。
所以这似乎是想要的行为,是吗?但为什么呢?由于性能?语义原因?
如果有人能向我解释一下或告诉我我做错了什么,我会很高兴。