Доктрина ManyToMany с условием соединения

У меня есть отношение Many-to-Many между двумя таблицами, но я хочу добавить условие соединения в таблицу соединений.

/** * @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, как я могу это сделать?

Solutions Collecting From Web of "Доктрина ManyToMany с условием соединения"

Да, у вас есть выбор для гидратации вашего объекта и его коллекции ManyToMany с помощью пользовательского 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

С этим я столкнулся, и единственным решением, которое я получил, было создание пользовательской функции, которая сделает запрос.

Итак, на вашем Entity создайте пользовательскую функцию getCompanies ().