Фильтр присоединения к доктрине - PullRequest
4 голосов
/ 19 апреля 2011

Я знаю, что условные фильтры еще не доступны для запросов (в соответствии с «26.1.4. Применение правил фильтрации к любому запросу» в разделе «Известные ограничения» руководства Doctrine2), поэтому я хотел спросить экспертов, что они предпочитают Решение следующей проблемы:

У моего сайта есть объекты товаров, у каждого из которых есть много отзывов. Отзывы имеют статус поля. Я не хочу излишне извлекать отзывы, которые не были одобрены во время автоматической ассоциации, которую Doctrine2 делает так чудесно.

Мое текущее решение / хак - использовать наследование одной таблицы (STI) с дискриминатором для «статуса» и иметь ApprovedProductReview, расширяющий класс ProductReview на основе состояния «УТВЕРЖДЕНО»

Я должен добавить, что я сейчас просто звоню
$em->find('Entities\Product', $pid);
чтобы получить мой продукт, и Doctrine2 делает все ассоциации автоматически. Должен ли я вместо этого создавать экземпляр продукта, предоставляя DQL-запрос?

То, что я действительно хотел бы, - это способ переопределить магию, предоставляемую Doctrine2 на основе аннотаций, и просто иметь возможность использовать DQL для ленивого получения правильного подмножества отзывов.

Предложения

1 Ответ

3 голосов
/ 19 апреля 2011

Вы можете использовать оператор WITH в DQL:

$dql = "SELECT p, r
        FROM Entities\Product p
        LEFT JOIN p.reviews r WITH r.status = :status
        WHERE p.id = :id"

$q = $em->createQuery($dql);
$q->setParameter('id', $id);
$q->setParameter('status', $status);
$product = $q->getSingleResult();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...