私は最新の予約コース(ユニーク)を取得しようとしています。それが動作ORDERBYなければsymfony doctrine orderby and group by(別名)
$repository = $this->getDoctrine()->getRepository('AppBundle:Booking');
$query = $repository->createQueryBuilder('b')
->select('(b.course) AS course')
->orderBy('b.id', 'DESC')
->groupBy('b.course')
->setMaxResults(5)
->getQuery();
が、それは予約の上昇を横断します:私はDoctrineのquerybuilderで次のことを試してみました。私は最新の予約コースが必要です。このクエリでは、私はこのエラーを取得しています:
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ... which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 500 Internal Server Error - DriverException
私も次のことを試してみました:
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
'SELECT DISTINCT c.id
FROM AppBundle:Booking b
JOIN b.course c
ORDER BY b.id DESC'
);
SQLSTATE[HY000]: General error: 3065 Expression #1 of ORDER BY clause is not in SELECT list, references column ... which is not in SELECT list; this is incompatible with DISTINCT
今、私は解決策を探していると、基本的ONLY_FULL_GROUP_BYを無効にする提案の多くを発見しました。 Disable ONLY_FULL_GROUP_BY
一部のコメントには、SQL標準に準拠するためにそれを行うことは賢明ではないことが記載されています。それでは、これはどのように動作しますか?
エンティティについての詳細情報を提供できますか?それらはどのようにマップされますか? (私はManyToOne単方向を推測しています) – OlivierC
複数のカスケード削除のためにManyToOne双方向、予約がコースなしで存在することができないので – DaViDa