1

2 つのテーブル間に多対多の関係がありますが、結合テーブルに結合条件を追加したいと考えています。

/**
 * @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 に答える