簡體   English   中英

Doctrine ManyToMany與連接條件的關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM