Pavel_Osipov
@Pavel_Osipov
Программист, в основном web

Symfony2 + Doctrine. Как получить @ORM\ManyToOne связь с условием?

Доброго дня

Возникла проблемка, прошу помощи у людей опытных в Symfony.

Есть две таблицы Offer и CustomerFiles

В CustomerFiles хранятся все файлы загруженные пользователем, в частности и файлы для предложений. Тип файла определяется по двум полям:

file_type

target_id

Т.е. для Offer с ID=22 их значения будут

file_type = 'offer_image'

target_id = 22



На данный момент я описал связь так:

Для Offer

/**<br>
     * @ORM\OneToMany(targetEntity="CustomerFiles", mappedBy="offer", cascade={"all"}, orphanRemoval=true  )<br>
     */<br>
    protected $files;<br>




Для CustomerFiles

/**<br>
     * @ORM\ManyToOne(targetEntity="Offer", inversedBy="files")<br>
     * @ORM\JoinColumn(name="target_id", referencedColumnName="id")<br>
     */<br>
    protected $offer;<br>




Сам Offer получаю просто:

$offer = $em -> getRepository( 'ProjectMainBundle:Offer' )<br>
                -> findOneById( $offerID );<br>




Но в итоге выбираются все файлы у которых target_id=22.

Как добавить условие WHERE file_type = 'offer_image'?



Или с помощью аннотаций такого не сделать и надо репозиторий создавать и сырой DQL запрос писать для получения Offer со всеми Join?



Заранее спасибо
  • Вопрос задан
  • 4422 просмотра
Решения вопроса 1
AmdY
@AmdY
PHP и прочие вебштучки
Раз у вас файлы разных типов, то и заводите для них разные типы в одной таблице. Зря вы велосипедили с file_type
doctrine-orm.readthedocs.org/en/2.0.x/reference/dql-doctrine-query-language.html#single-table
Ну и затем связи прописывайте на нужный Entity.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Вообще обычно так и делают: создают свой репозиторий и либо добавляют туда запрос, либо перегружают метод findBy.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы