バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

プラグイン > 開発について > QueryBuilder に innerJoin されているかどうかを判定したい

開発について

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2017/5/23 14:22
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1635
QueryBuilder に innerJoin されているかどうかを判定したい
EC-CUBE 3.0.10

商品検索時に商品種別に対してフィルターをかけたいのですが、プラグイン側で ProductClasses に対してleftJoinしようとすると全商品検索(カテゴリー指定なし)のときにエラーになります。

src/Eccube/Repository/ProductRepository.php
において、カテゴリーを指定していないときは ProductClasses をinnerJoinしていないためだと思われます。

プラグイン側で、QueryBuilder に ProductClasses をinnerJoinしているかどうかを判定することは可能でしょうか?

エラーメッセージ
QueryException in QueryException.php line 63:
[Semantical Error] line 0, col 50 near '.ProductType': Error: Identification Variable pc used in join path expression but was not defined before.

event.yml
front.product.index.search:
    - [onRenderProductIndexSearch, NORMAL]


Event.php

    public function onRenderProductIndexSearch(EventArgs $event)
    {
        $app = $this->app;
        $searchData = $event->getArgument('searchData');
        $qb = $event->getArgument('qb');

        // 商品種別で絞り込み
        $qb
            ->leftJoin('pc.ProductType', 'pt')
            ->andWhere('pt.id!=:id')
            ->setParameter('id', 1);
    }


ちなみに、EC-CUBE 3.0.14 ではなぜかエラーが発生せず問題なくフィルタリングできました。


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

nyorai
投稿日時: 2017/5/23 14:44
対応状況: −−−
仙人
登録日: 2015/8/21
居住地:
投稿: 302
Re: QueryBuilder に innerJoin されているかどうかを判定したい

$qb->getDQLPart('join');


で、joinされている一覧を取得できるので、それで判定すると良いかと思います。
h_tanaka
投稿日時: 2017/5/23 15:04
対応状況: 解決済
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1635
Re: QueryBuilder に innerJoin されているかどうかを判定したい
ありがとうございます!

教えていただいた方法を組み込んで、次のような実装で判定することができました。
            // 商品規格がjoinされていない場合はここでjoin
            $isJoin = false;
            $joins = $qb->getDQLPart('join');
            if ($joins && !empty($joins['p'])) {
                foreach ($joins['p'] as $join) {
                    if ($join->getAlias() == 'pc') {
                        $isJoin = true;
                        break;
                    }
                }
            }
            if (!$isJoin) {
                $qb->innerJoin('p.ProductClasses', 'pc');
            }


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

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


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2311
5
umebius
2085
6
yuh
1819
7
h_tanaka
1635
8
red
1569
9
mcontact
1265
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.