Doctrine orm 如何在manytone关系中手动连接列和目标实体?

Doctrine orm 如何在manytone关系中手动连接列和目标实体?,doctrine-orm,doctrine,mapping,doctrine-query,Doctrine Orm,Doctrine,Mapping,Doctrine Query,我有两个字段:帐户类型\ id和帐户\ id。 如果accountTypeId=1,我如何手动将条令目标实体映射到加入公司实体;如果account\u-id=2,我如何手动将条令目标实体映射到加入用户实体 <?php /** @Entity */ class Accounts { // 1= Company, 2 = User private $accountType; /** * @ManyToOne(targetEntity="Compa

我有两个字段:帐户类型\ id帐户\ id。 如果accountTypeId=1,我如何手动将条令目标实体映射到加入公司实体;如果account\u-id=2,我如何手动将条令目标实体映射到加入用户实体

<?php 
/** @Entity */
class Accounts
{
    // 1= Company, 2 = User
    private $accountType;

    /**
     * @ManyToOne(targetEntity="Companies")
     */
    private $company;


    /**
     * @ManyToOne(targetEntity="Users")
     */
    private $user;

    //...

}

不幸的是,动态连接不同的列无法自动完成,但是您可以将这两个字段都设置为可空,并且在持久化帐户实体时只设置正确的字段

这将是注释:

/**
 * @ORM\ManyToOne(targetEntity="Users", inversedBy="users")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=true)
 */
private $user;
请记住,不管怎样,nullable=true是默认值,我只是在这里具体说明一下

如果你想对此进行防御,你可以有一个额外的签入getter

/**
 * @return User
 * @throws \Exception
 */
public function getUser()
{
    if ($this->accountType !== 2) {
        throw new \Exception("Entity is not of type 'user'");
    }
    return $this->user;
}