バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > $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
居住地:
投稿: 3217
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
居住地:
投稿: 3217
Re: $query->getResultとSQLの実行結果が違う
function getQueryBuilderBySearchData()の
カテゴリによる絞込み条件をセットする処理を確認すると
$Categories = $searchData['category_id']->getSelfAndDescendants();
でin句の内容をセットしている為、
関連する子カテゴリが含まれていると思います。

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


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

akt006
投稿日時: 2022/8/4 12:29
対応状況: −−−
新米
登録日: 2022/8/4
居住地:
投稿: 1
Re: $query->getResultとSQLの実行結果が違う
お世話になります。
私もこちらの対処方法について伺いたく返信させていただきます。
SQLで実行した際はsetMaxResultで指定した値の件数(複数のカテゴリに紐付いて複数件出力)が返ってくるのですが、Twigではまとめられ、出力される商品は少なくなってしまいます。

複数のカテゴリに紐付いた商品が含まれていたとしても、setMaxResultで指定した値と同じ件数の商品が返ってくるようにしたいです。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,307名です
総投稿数は109,692件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

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

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