gpt4 book ai didi

Symfony2/Doctrine2-ManyToOne-保存反面

转载 作者:行者123 更新时间:2023-12-04 04:30:21 24 4
gpt4 key购买 nike

我是Symfony和Doctrine的新手。

我有一个实体“用户”和一个实体“类型”。一个用户可以具有一种收藏夹类型,而一种类型可以具有许多将该特定类型作为收藏夹的用户。因此,我需要一个“多(用户)到一个(类型)”关系。

我实现了它,并且效果很好(大部分情况下)。但是有一件事我不明白。

如果我做这样的事情,它会工作:

$user = new User();
$type = new Type();

$user->setFavoriteType($type);
$em->persist($user);
$em->persist($type);
$em->flush();

生成对象并将其存储到数据库。正确设置了favorite_type_id。
因此, 更改拥有方的工作原理与预期的相同。

但是,如果我将User添加到反面(仅)并刷新实体管理器,则没有设置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)”,它将起作用。但这不是学说的任务吗?

该文件说

When a bidirectional association is updated, Doctrine only checks on one of both sides for these changes. This is called the owning side of the association.



所以这似乎是通缉的行为,对吗?但为什么?由于性能?语义原因?

如果有人可以向我解释一下或告诉我我做错了什么,我会很高兴。

最佳答案

checkout Doctrine documentation on cascading.。通过添加cascade={"persist"}并清除缓存(以重建Doctrine的元数据缓存),这应该可以帮助您快速轻松地开始自己的工作。

关于Symfony2/Doctrine2-ManyToOne-保存反面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26070677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com