как я могу получить несоединенные значения с помощью 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();
}
У меня есть комментарии и сообщения с ассоциацией многие к одному, пользователи и сообщения с другой ассоциацией многие к одной. Я хочу отображать информацию о посте, такую как название, дату и т. д. Количество комментариев и дату последнего комментария. это для форума, который я разрабатываю.
Прежде всего, вы должны попытаться использовать левое соединение с пользовательской сущностью. Примерно так: 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
Проблема не устранена: /




Попробуйте что-то вроде этого:
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: мне пришлось изменить с помощью)
Попробуйте это: (для 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 ... Это потому, что сообщения имеют комментарии, а не наоборот
Я наконец нашел решение для этого, хотя считаю, что это мусорный код: / Спасибо всем. Код:
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();
}
Какие именно данные вы хотите получить из БД с помощью запроса?