在一对多单向关系上级联的Doctrine2问题

时间:2015-11-06 11:46:50

标签: php mysql doctrine-orm doctrine one-to-many

我遇到UserSociableCredential之间的以下一对多单向关系的问题(我已经简化了一些代码)。

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
  • 凭证
  • usersociable_credential

填充数据库后,我遇到以下问题:当我删除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'

提前致谢。

0 个答案:

没有答案