Для сущности «Сообщение» мне нужно получить группу последних сообщений получателя по полю «Пользователь».
Вот сущность со своими связями:
/**
* @ORM\Entity(repositoryClass="App\Repository\MessageRepository")
*/
class Message
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="messages")
* @ORM\JoinColumn(nullable=false)
*/
private $User;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="receivedmessages")
* @ORM\JoinColumn(nullable=false)
*/
private $receiver;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $text;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $creationdate;
Пока это это мой конструктор запросов в репозитории сообщений, чтобы получить последнее сообщение для получателя от пользователя:
public function getConversations($dest)
{
$qb = $this
->createQueryBuilder('c')
->Where('c.receiver = :dest')
->setParameter('dest', $dest)
->orderBy('c.creationdate', 'DESC')
->groupBy('c.User')
;
return $qb
->getQuery()
->getResult()
;
}
Когда я запускаю этот запрос, я получаю сообщение об ошибке:
SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1055 Выражение № 1 списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец spro.m0_.id, который функционально не зависит от столбцов в предложении GROUP BY; это несовместимо с sql_mode = only_full_group_by
В других шагах некоторые говорят, что нам нужно удалить ONLY_FULL_GROUP_BY из mysql консоли, чтобы избежать этой ошибки, некоторые другие говорят, что это не рекомендуется.
Есть ли другой способ выполнить мой запрос без изменения настроек базы данных?
РЕДАКТИРОВАТЬ: Я также попытался получить сообщение от пользователя репозитория вместо того, чтобы делать это из репозитория сообщений следующим образом:
public function getConversations($id)
{
$qb = $this
->createQueryBuilder('u')
->andWhere('u.id = :val')
->setParameter('val', $id)
->Join('u.receivedmessages', 'd')
->groupBy('d.User')
->Select('d')
;
return $qb
->getQuery()
->getResult()
;
}
В этом случае я получаю сообщение об ошибке:
[Семантическая ошибка] строка 0, столбец -1 рядом с 'SELECT d FROM': Ошибка: невозможно выбрать объект через идентификационные переменные, не выбрав хотя бы одну root псевдоним объекта.