1

我在两个表之间有一个多对多关系,但我想在连接表上添加一个连接条件。

/**
 * @ManyToMany(targetEntity="Company", inversedBy="Accounts")
 * @JoinTable(name="account_company",
 *      joinColumns = { @JoinColumn(name="account_id", referencedColumnName="id") },
 *      inverseJoinColumns = { @JoinColumn(name="company_id", referencedColumnName="id") }
 * )
 */
protected $companies;

我会有像“account_company.is_deleted = 0”这样的条件,我该怎么做?

4

2 回答 2

4

是的,您可以选择使用自定义 dql 对您的对象及其 ManyToMany 集合进行水合:

创建一个存储库方法,为您的加入添加条件:

// repository class:
public function getAccountWithNonDeletedCompanies($id)
{
    return $this->createQueyBuilder('account')
        ->leftJoin('account.companies', 'companies', 'WITH', 'companies.deleted = 0')
        ->andWhere('account.id = :id')
        ->setParameter('id', $account)
        ->getQuery()
        ->getOneOrNullResult()
    ;
}

据我了解,您永远不想显示已删除的公司?(软删除)。

在这种情况下,您可能需要使用 SQL 过滤器:http: //blog.loftdigital.com/doctrine-filters-and-soft-delete

于 2013-05-23T13:33:30.397 回答
0

之前处理过这个问题,我得到的唯一解决方案是创建一个自定义函数来进行查询。

因此,在您的实体上创建一个自定义函数 getCompanies()。

于 2013-05-23T10:19:59.367 回答