1

Тема: mappedBy по двум колонкам

Название темы не совсем соответствует вопросу, но я так и не придумал чего-то более адекватного.

В системе есть такое понятие, как "платеж". Информация по ним хранится в таблице payments (сущность Payment). Есть несколько других сущностей, которые имеют связь с платежами OneToMany. Чтобы как-то разделить платежи между сущностями, они связываются с ними не только по ID, но и по еще одному полю entity.

Стандартное описание связи OneToMany в классах сущностей связывает записи по ID:

/**
     * @ORM\OneToMany(targetEntity="App\MyBundle\Entity\Payment", mappedBy="pid")
     *
     * @var ArrayCollection
     */

    protected $payments;

Как добавить сюда еще один критерий выборки - значение которого подставлялось бы в аннотации? Ну если пофантазировать, то это могло бы выглядеть как-то так

/**
     * @ORM\OneToMany(targetEntity="App\MyBundle\Entity\Payment", mappedBy="pid", criteria={"entity":user})
     *
     * @var ArrayCollection
     */

    protected $payments;

И должно сгенерировать нечто похожее на:

... pid = 99 AND entity = "user"...

Извините, если описал очень сумбурно.

2

Re: mappedBy по двум колонкам

Маппинг такой вы создать не можете, просто потому что вы слишком много хотите от функциональности внешних ключей в БД. А вот прописать несколько JoinColumn для хитрой выборки вполне можете попробовать.
Как например вот здесь: https://github.com/doctrine/doctrine2/b … Photos.php
Однако разместить там условие на соответствие определенному значению вы уже не сможете.
Переосмыслите свою схему данных.

P.S. Если хочется извратиться именно с выборкой, то вы можете создать именованный запрос:
http://docs.doctrine-project.org/en/lat … tive-query