我试图在原则2中映射两个MySQL表之间的关系。我拥有的实体是'Campaign',它加入'Channel'。
保存活动记录时,它必须包含频道id。检索活动时,我希望使用此id加入频道并显示频道名称(从频道表)。我相信这是一对一的单向关系,如果我错了,请纠正我。
我使用Doctrine 2 XML指定了如下映射:
<one-to-one field="channelId" target-entity="Channel" fetch="EAGER">
<join-column name="channel_id" referenced-column-name="id" />
</one-to-one>
当填充活动实体并试图持久化它时,我得到以下错误。
通过未配置为级联持久化操作的关系找到新实体:Mvc\entity\Channel@0000000034b3dcd500000000cc77faae。显式持久化新实体或在关系上配置级联持久化操作。
如何指定此持久性,我不想修改或保存通道实体。我研究过关于“关联映射”的第2条文件,但我不明白这是怎么可能的。
谢谢您。
最佳答案
当您持久化一个对象时,您需要确保所有关联的对象也被持久化。在本例中,您将创建活动并将其与频道关联。如果通道对象尚未持久化,则需要在调用flush或在关系上放置持久化级联之前执行此操作。以下是您的两个选择:
1)在代码中,当持久化活动时,还显式地持久化通道。
$em->perist($campaign);
$em->persist($campaign->getChannel());
2)在Campaign::channel上放置持久级联。当通道对象与活动关联时,它将自动保持。我不知道XML的确切语法,但请尝试
<one-to-one field="channelId" target-entity="Channel" fetch="EAGER">
<join-column name="channel_id" referenced-column-name="id" />
<cascade><cascade-persist /></cascade>
</one-to-one>
关于php - 在 Doctrine 2中以映射关系持久保存所选实体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6328245/