Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Doctrine orm 条令2.0对2.1_Doctrine Orm - Fatal编程技术网

Doctrine orm 条令2.0对2.1

Doctrine orm 条令2.0对2.1,doctrine-orm,Doctrine Orm,您好,我在尝试级联删除OneToMany关系中的实体时遇到问题。 经过几个小时的调试后,我试图将原则从最新的2.1.2降级到2.0.2,它突然开始工作 想象两个实体的公司和地址关系1:N /** * @Entity */ class Company extends Entity { /** * @var integer * @id @Column(type="integer") * @generatedValue */ private $id; /** * @v

您好,我在尝试级联删除OneToMany关系中的实体时遇到问题。 经过几个小时的调试后,我试图将原则从最新的2.1.2降级到2.0.2,它突然开始工作

想象两个实体的公司和地址关系1:N

/**
 * @Entity
 */
class Company extends Entity
{

 /**
  * @var integer
  * @id @Column(type="integer")
  * @generatedValue
  */
 private $id;

 /**
  * @var Collection
  * @OneToMany(targetEntity="Address",mappedBy="company", cascade={"persist","remove"})
  */
 private $addresses;
}



/**
 * @Entity
 */
class Address extends Entity
{

 /**
  * @var integer
  * @id @Column(type="integer")
  * @generatedValue
  */
 private $id;

 /**
  * @var Company
  * @ManyToOne(targetEntity="Company", inversedBy="addresses")
  * @JoinColumn(name="company_id", referencedColumnName="id",nullable=false)
  */
 private $company;
}
当我试图删除实体公司时,我希望分配的地址也将被删除

$em->remove($company);
$em->flush();
在原则2.1.2中,不执行地址删除,因此完整性约束失效。在版本2.0.2中,它可以完美地工作。值得注意的是,如果我使用EntityAudit扩展,LogRevisionListener会正确地对doctrine 2.1.2(当然在2.0.2中也是如此)中的addresses实体进行版本控制,但UnitOfWork不会删除它

在2.0.2和2.1.2中如何处理级联删除有什么不同吗


非常感谢

我遇到了同样的问题,我用代码解决了他:

$em->remove($object);
$em->flush();
$em->remove($user);
$em->flush();
也许您可以在您的
公司
上使用
findAll
作为地址,并使用
foreach
删除此地址,如下所示:

// Return all the addresses of the company
$addresses = $em->getRepository(...)->findAllAddressesByCompany($company);
$em->remove($company);
foreach ($address in $addresses)
{
    $em->remove($address);
}

这不是一个很好的方法,但就目前而言,这是我发现的所有方法。

尝试在您的
公司
类的
地址
属性中使用此方法

@OneToMany(targetEntity="Address",mappedBy="company", 
cascade={"persist"}, orphanRemoval=true)

我也有同样的问题。。。关系被添加或更新,但没有被删除,即使我有级联:[持久,删除]

我发现我不需要“cascade”中的“remove”属性,但我必须添加孤儿移除:true


我快疯了,你让我开心

我已经解决了这个问题,降低了原则的等级:)谢谢,但这不是我想要的方法:(可能是一个bug(或一个特性?)我今天也偶然发现了这个问题,我使用的是2.1.6.:/我必须纠正我自己,它现在对我有效!我使用的是
cascade={“all”}
但是当我在
cascade>中更改它时={“remove”}
一切都开始正常工作。尽管我不得不说,我的问题可能不完全是由于注释集或条令本身,因为我正在对实体进行密集的操作,在对级联选项组合进行一些测试后,我发现
合并了“
选项是导致问题的一个选项。希望它能有所帮助:)我使用的是原则2.2.3,但仍然是一样的。必须添加删除=true。有点奇怪,因为我没有移除一侧,所以没有创建任何孤儿。也许是因为多方都是拥有方,而我正从一方撤走。更新之所以有效,是因为多方是拥有方,我使用的是
$this->addSomething(theThing)
theThing->setSomething($this)
其中,好像我在删除某个内容,没有设置内容,只有
$this->removeSomething(theThing)