前提・実現したいこと
環境
MAC OS BigSur
MAMP
ECcube 4.0.5
クエリビルダの実装にて悩んでおります。
以下のカラムを所持しております。
|id|discriminator|order_id| square_quantity| update_date|square_product_id
|:--|:--:|--:|
||||
クエリビルダは正直使い慣れておらず、少しづつ進めております。
やりたきことは、
こちらのsquare_product_idの重複を解消し、square_quantityの数が多い順に並べようと思っております。
現在、重複の解消は以下のコードにて解消しているのですが、square_quantityの処理をつけようとしているのですが期待通りの結果を得られず
エラーが出てしまいます。
エラーコードをもとに検索もしておりますが、なかなか解決策の様なものを見つけられません。(見落としてるのかもしれません)
この場合、どの様にクエリビルダを指定すれば、数の多い順に表示できるでしょうか?
アドバイスいただければ幸いです。
発生している問題・エラーメッセージ
An exception occurred while executing 'SELECT d0_.square_product_id AS square_product_id_0, d0_.square_quantity AS square_quantity_1 FROM dtb_square_order_detail d0_ WHERE d0_.discriminator_type IN ('squareorderdetail') GROUP BY d0_.square_product_id ORDER BY d0_.square_product_id ASC, d0_.square_quantity DESC LIMIT 5': SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'local20210526.d0_.square_quantity' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
該当のソースコード
PHP
1<?php 2 3namespace Customize\Repository; 4 5// use Customize\Entity\SquareOrder; 6use Customize\Entity\SquareOrderDetail; 7use Doctrine\Common\Collections\ArrayCollection; 8// use Eccube\Repository\AbstractRepository; 9use Symfony\Bridge\Doctrine\RegistryInterface; 10 11class SquareOrderDetailRepository extends \Eccube\Repository\AbstractRepository 12{ 13 /** 14 * SquareOrderRepository constructor. 15 * 16 * @param RegistryInterface $registry 17 */ 18 public function __construct(RegistryInterface $registry) { 19 parent::__construct($registry, SquareOrderDetail::class); 20 } 21 22 /** 23 * findSquareQuantity 24 * 25 * @return SquareOrderDetail 26 */ 27 public function findSquareQuantity() { 28 29 $qb = $this->createQueryBuilder('so'); 30 $qb->select('so.square_product_id', 'so.square_quantity') 31 32 // 重複商品IDの削除 33 ->groupBy('so.square_product_id') 34 ->orderBy('so.square_product_id') 35 ->addOrderBy('so.square_quantity', 'DESC') 36 ->setMaxResults(5); 37 // var_dump($qb); 38 39 $QuantityResult = $qb 40 ->getQuery() 41 ->getResult(); 42 // var_dump($QuantityResult); 43 44 return $QuantityResult; 45 46 } 47}
試したこと
重複が解消できたのち
->addOrderBy('so.square_quantity', 'DESC')を付け加えたところ、上記のエラーが発生し調べている最中です。
select('so.square_product_id')に'so.square_quantity'を付け加え、再度試しましたがうまくいきませんでした。
キャッシュクリア済み
現在引き続き調査中
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。