Получение несвязанных значений с помощью dql

как я могу получить несоединенные значения с помощью dql? Проблема в этом коде в том, что я получаю только сообщения с комментариями.

public function getAllPostsDQL()
{
    $q = $this->getEntityManager()
        ->createQuery('SELECT p.type,p.date,p.urlImage,p.nom,u.nom as nomU,u.prenom as prenomU ,COUNT(co) as nb,MAX(co.date) as maxDate FROM PidevBundle:Publication p LEFT OUTER JOIN 
           PidevBundle:Commentaire co WITH co.idPublication=p
           JOIN PidevBundle:User u WITH p.idUser=u
           ');

    return $q->getResult();
}

Какие именно данные вы хотите получить из БД с помощью запроса?

EmilCataranciuc 03.04.2018 20:01

У меня есть комментарии и сообщения с ассоциацией многие к одному, пользователи и сообщения с другой ассоциацией многие к одной. Я хочу отображать информацию о посте, такую ​​как название, дату и т. д. Количество комментариев и дату последнего комментария. это для форума, который я разрабатываю.

Bahri MohamedAziz 03.04.2018 20:21

Прежде всего, вы должны попытаться использовать левое соединение с пользовательской сущностью. Примерно так: SELECT p.type,p.date,p.urlImage,p.nom,u.nom as nomU,u.prenom as prenomU ,COUNT(co) as nb,MAX(co.date) as maxDate FROM PidevBundle:Publication p LEFT OUTER JOIN PidevBundle:Commentaire co WITH co.idPublication=p LEFT OUTER JOIN PidevBundle:User u WITH p.idUser=u

a_sarana 03.04.2018 20:39

Проблема не устранена: /

Bahri MohamedAziz 03.04.2018 20:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
4
55
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попробуйте что-то вроде этого:

public function getAllPostsDQL()
{
    $q = $this->getEntityManager()->createQuery(
        'SELECT 
            p.type,
            p.date,
            p.urlImage,
            p.nom,
            u.nom as nomU,
            u.prenom as prenomU,
            COUNT(co.id) as nb,
            MAX(co.date) as maxDate 
        FROM PidevBundle:Publication p 
        LEFT JOIN p.idUser u
        LEFT JOIN PidevBundle:Commentaire co ON co.id = u.id
    ');

    return $q->getResult();
}

получил тот же результат, что и мой первый код: / (PS: мне пришлось изменить с помощью)

Bahri MohamedAziz 03.04.2018 22:03

Попробуйте это: (для Symfony3 может потребоваться изменить синтаксис)

public function getAllPostsDQL()
{
    $qb = $this->createQueryBuilder('publication');
    $qb->select(array('publication.type', 'publication.date', 'publication.urlImage', 
                      'publication.nom', 'u.nom AS nomU', 'u.prenom AS prenomU', 
                      'COUNT(co.id) AS nb', 'MAX(co.date) AS maxDate'))
       ->leftJoin('p.idUser', 'u')
       ->leftJoin('p.idCommentaire', 'co');

    return $qb->getQuery()->getResult();
}

PidevBundle \ Entity \ Publication не имеет ассоциации с именем idCommentaire ... Это потому, что сообщения имеют комментарии, а не наоборот

Bahri MohamedAziz 03.04.2018 21:52
Ответ принят как подходящий

Я наконец нашел решение для этого, хотя считаю, что это мусорный код: / Спасибо всем. Код:

public function getAllPostsDQL()
{
    $q = $this->getEntityManager()->createQuery(
        'SELECT 
                p.type,
                p.date,
                p.urlImage,
                p.nom,
                u.nom as nomU,
                u.prenom as prenomU,
                (SELECT COUNT(co.id) FROM PidevBundle:Commentaire co WHERE co.idPublication=p) as nb,
                (SELECT MAX(com.date) FROM PidevBundle:Commentaire com WHERE com.idPublication=p) as maxDate
                FROM PidevBundle:Publication p 
                INNER JOIN p.idUser u
                ');
    return $q->getResult();
}

Другие вопросы по теме