Rez*_*a S 10 doctrine symfony doctrine-orm
首先,我想说我已经阅读了所有文档,并在发布此问题之前搜索了这些内容.我知道那个错误意味着什么(关系中的非持久化实体)
我收到这个错误,我认为我不应该得到它.
我有一个OneToMany双向关系如下:
Class Channel
{
/**
* @ORM\OneToMany(targetEntity="Step", mappedBy="channel", cascade={"all"}, orphanRemoval=true)
* @ORM\OrderBy({"sequence" = "ASC"})
*/
protected $steps;
}
Class Step
{
/**
* @ORM\ManyToOne(targetEntity="Channel", inversedBy="steps")
*/
protected $channel;
}
Run Code Online (Sandbox Code Playgroud)
一个人Channel
可以拥有许多人Step
,拥有者也可以Channel
.从Doctrine 2.4升级到2.5后,我收到此错误:
Doctrine\ORM\ORMInvalidArgumentException:通过关系'Company\MyBundle\Entity\Step#channel'找到一个新实体,该关系未配置为级联实体的持久操作
为什么它甚至从反面寻找新的关系呢?这是我的代码:
$channel = new Channel();
$step = new Step();
$channel->addStep($step);
$em->persist($channel);
$em->flush();
Run Code Online (Sandbox Code Playgroud)
谢谢!
你是对的:学说只是为了改变自己的一方,但你错了:拥有你们关系的一面是Step
,不是Channel
.
为什么步入拥有方?因为是具有外键的实体.即使是Doctrine文档也告诉你
拥有方必须使用OneToOne,ManyToOne或ManyToMany映射声明的inversedBy属性.inversedBy属性包含反面的关联字段的名称.
尝试通过放入cascade={"all"}
Step实体来反转级联操作(你确定所有这些都是正确的选择吗?)
明确地坚持两个实体:
$channel = new Channel();
$step = new Step();
$channel->addStep($step);
$em->persist($channel);
$em->persist($step);
$em->flush();
Run Code Online (Sandbox Code Playgroud)
在这里你可以阅读为什么这里提供的第二种方式也很好
归档时间: |
|
查看次数: |
13869 次 |
最近记录: |