バージョン選択

フォーラム

メニュー

オンライン状況

42 人のユーザが現在オンラインです。 (11 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 42
もっと...

サイト内検索

質問 > フロント機能 > $query->getResultとSQLの実行結果が違う

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
uedymd
投稿日時: 2020/3/11 16:26
対応状況: −−−
新米
登録日: 2017/2/13
居住地:
投稿: 6
$query->getResultとSQLの実行結果が違う
▼テンプレート
[EC-CUBE] 4.0.3 新規インストール
[レンタルサーバ] さくらサーバー
[OS] FreeBSD 9.1-RELEASE-p24 amd64
[PHP] 7.3.14
[データベース] MySQL 5.7
[WEBサーバ] Apache/2.4.41
[ブラウザ] safari バージョン13.0.5 (15608.5.11)
[導入プラグインの有無] 色々入れています
[カスタマイズの有無]
[現象]
https://techmemo.biz/ec-cube/newitem-categoryitem-block/
こちらのサイトを参考にして、トップページにカテゴリ別の新着情報を表示する設定をしています。

$query = $qb->setMaxResults(10)->getQuery();
で、カテゴリごとに10件ごと新着商品を表示しようとしていますが、実際には4件や5件とかなり少ない商品しか表示されません。
$products = $query->getResult();
で取得した値を見てみても、やはり10件ありません。
デバッグモードで実行されたSQL文を確認し、DB上で実行すると、正しく10件表示されます。
何か書き方など問題があるのでしょうか。
以下、ソースになります。

public function getCustomizeNewProduct(int $cat_id)
{

try {
//検索条件の新着順を定義
$searchData = array();
$qb = $this->entityManager->createQueryBuilder();
$query = $qb->select("plob")
->from("Eccube\\Entity\\Master\\ProductListOrderBy", "plob")
->where('plob.id = :id')
->setParameter('id', $this->eccubeConfig['eccube_product_order_newer'])
->getQuery();
$searchData['orderby'] = $query->getOneOrNullResult();

//カテゴリの指定
$qb = $this->entityManager->createQueryBuilder();
$query = $qb->select("ctg")
->from("Eccube\\Entity\\Category", "ctg")
->where('ctg.id = :id')
->setParameter('id', $cat_id)
->getQuery();
$searchData['category_id'] = $query->getOneOrNullResult();

//商品情報を10件取得
$qb = $this->productRepository->getQueryBuilderBySearchData($searchData);
$query = $qb->setMaxResults(10)->getQuery();
$products = $query->getResult();

return $products;

} catch (\Exception $e) {
return null;
}
return null;
}


【追記です】
実行されるSQLは以下になります。
SELECT d0_.id AS id_0, d0_.name AS name_1, d0_.note AS note_2, d0_.description_list AS description_list_3, d0_.description_detail AS description_detail_4, d0_.search_word AS search_word_5, d0_.free_area AS free_area_6, d0_.create_date AS create_date_7, d0_.update_date AS update_date_8, d0_.discriminator_type AS discriminator_type_9, d0_.creator_id AS creator_id_10, d0_.product_status_id AS product_status_id_11 FROM dtb_product d0_ INNER JOIN dtb_product_category d1_ ON d0_.id = d1_.product_id AND d1_.discriminator_type IN ('productcategory') INNER JOIN dtb_category d2_ ON d1_.category_id = d2_.id AND d2_.discriminator_type IN ('category') WHERE (d0_.product_status_id = 1 AND d1_.category_id IN (86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71)) AND d0_.discriminator_type IN ('product') ORDER BY d0_.create_date DESC, d0_.id DESC LIMIT 10

DB上で実行すると10件返ってきますが、Twigで取得できる値は4件となります。
468
投稿日時: 2020/3/12 9:25
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 2299
Re: $query->getResultとSQLの実行結果が違う
SQLを実行した結果の10件は同じ商品が複数のカテゴリに紐づいて複数件出力されていないでしょうか?
getQueryBuilderBySearchDataはあくまでProductを返していると思います思いますので
その辺りは自動的にまとめられているのではないでしょうか?


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

uedymd
投稿日時: 2020/3/12 16:39
対応状況: −−−
新米
登録日: 2017/2/13
居住地:
投稿: 6
Re: $query->getResultとSQLの実行結果が違う
ご返信ありがとうございます!

ご指摘のとおり、同じ商品が複数件出力されていました。。。

//カテゴリの指定
$qb = $this->entityManager->createQueryBuilder();
$query = $qb->select("ctg")
->from("Eccube\\Entity\\Category", "ctg")
->where('ctg.id = :id')
->setParameter('id', $cat_id)
->getQuery();
$searchData['category_id'] = $query->getOneOrNullResult();

ここでカテゴリの指定方法が違っているということでしょうか?

やりたいことは、カテゴリIDに紐づく新着商品10件を取得したいのですが。。。
確かにSQL文で d1_.category_id IN (86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71)と複数のカテゴリが指定されています。
468
投稿日時: 2020/3/16 10:31
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 2299
Re: $query->getResultとSQLの実行結果が違う
function getQueryBuilderBySearchData()の
カテゴリによる絞込み条件をセットする処理を確認すると
$Categories = $searchData['category_id']->getSelfAndDescendants();
でin句の内容をセットしている為、
関連する子カテゴリが含まれていると思います。

想定以上のカテゴリが対象となるのは
それがカテゴリの親子関係が原因ではないでしょうか?


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は62,289名です
総投稿数は96,257件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
468
2299
4
nanasess
2044
5
yuh
1612
6
umebius
1588
7
red
1403
8
h_tanaka
1009
9
fukap
907
10
tsuji
863
11
shutta
835
12
tao_s
792
13 ramrun 789
14 karin 656
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.