pet*_*iss 7 foreign-keys symfony doctrine-orm
我有一个公司实体,其中每个公司在分层树结构中有另一个母公司.
应用程序中的一切正常,所以我确定我的实体类是正确的.
问题是,如果数据库中已有内容,那么就这样做了
doctrine:fixtures:load
Run Code Online (Sandbox Code Playgroud)
给出了这个错误:
[PDOException]
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails
Run Code Online (Sandbox Code Playgroud)
我相当确定问题是load:fixtures必须截断表,但它不能得到这个错误.
我不知道如何解决这个问题,而不在黑客攻击Doctrine之前禁用关键约束.这不是一个长期的解决方案.
数据结构中的其他关系不会导致问题,因为学说似乎以正确的顺序清除以避免问题,但是公司表是自我引用的,它会失败.
这是我的实体.
class Company
{
/**
* @var integer $id
*
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string $name
* @ORM\Column(type="string", length=100)
*/
protected $name;
/**
* @ORM\ManyToOne(targetEntity="Company", inversedBy="children")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
*/
protected $parent;
/* other properties here..... */
}
Run Code Online (Sandbox Code Playgroud)
我使用Symfony 2.0.7和最新的deps,以及MySQL 5.5
pet*_*iss 17
我只需要正确设置OnDelete的行为.
它默认为RESTRICT,它解释了抛出的错误.将其显式设置为CASCADE或SET NULL允许doctrine清空表而没有错误.
在我的情况下,我不想删除父项导致删除子项,所以我使用SET NULL,以便只删除关系.
/**
* @ORM\ManyToOne(targetEntity="Company", inversedBy="children")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="set null")
*/
protected $parent;
Run Code Online (Sandbox Code Playgroud)