[英]Doctrine ManyToMany relation with join condition
我在两个表之间有一个多对多关系,但我想在连接表上添加一个连接条件。
/**
* @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”的条件,我怎么能做到?
是的,您可以选择使用自定义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
以前处理过这个问题,我得到的唯一解决方案是创建一个自定义函数来进行查询。
所以在你的实体上创建一个自定义函数getCompanies()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.