我遇到UserSociable
和Credential
之间的以下一对多单向关系的问题(我已经简化了一些代码)。
UserSociable
实体是该关系的所有者:
/**
* Class UserSociable
* @ORM\Entity(repositoryClass="Repository\UserSociableRepository")
* @ORM\Table(name="userSociable")
* @DiscriminatorEntry(value="userSociable")
*/
class UserSociable
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToMany(targetEntity="Credential")
* @ORM\JoinTable (
* joinColumns={@ORM\JoinColumn(name="entity_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="credential_id", referencedColumnName="id", unique=true)}
* )
*/
private $credentials;
}
Credential
实体是反面的:
/**
* @ORM\Entity(repositoryClass="Repository\CredentialRepository")
* @ORM\Table(name="credentials")
*/
class Credential
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
}
这些在DB中创建了三个表:
填充数据库后,我遇到以下问题:当我删除userSociable
时,Doctrine会自动删除连接表usersociable_credential
中的相应行。
由于PK在usersociable_credential
表中被引用为FK,因此我期待引发异常。这是预期的行为,因为我从未在连接列注释中使用onDelete="CASCADE"
之类的注释。
我想强制删除所有用户的Credentials
,然后才能删除UserSociable
。
我查看了MySQL日志文件并找到了以下查询:
151106 12:16:24 113 Query START TRANSACTION
113 Query DELETE FROM usersociable_credential WHERE entity_id = '1'
113 Query DELETE FROM ku_user WHERE id = '1'
113 Query commit
113 Quit
112 Quit
如何避免由Doctrine ???
创建和执行查询DELETE FROM usersociable_credential WHERE entity_id = '1'
提前致谢。