与加盟条件学说多对多关系(Doctrine ManyToMany relation with joi

2019-09-26 01:02发布

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

/**
 * @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”,我该怎么做呢?

Answer 1:

是的,你有选择地滋润你的对象和它的多对多集合使用自定义DQL:

做,增加了你的加入条件库方法:

// 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



Answer 2:

已经处理了在此之前,我得到了唯一的解决方案是创建一个自定义的功能,这将使查询。

因此,对你的实体创建一个自定义功能getCompanies()。



文章来源: Doctrine ManyToMany relation with join condition