У меня есть отношение 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, как я могу это сделать?
Да, у вас есть выбор для гидратации вашего объекта и его коллекции 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 ().