バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

プラグイン > 開発について > 検索機能の拡張について

開発について

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Morpheus
投稿日時: 2018/2/28 8:26
対応状況: −−−
新米
登録日: 2018/2/28
居住地:
投稿: 3
検索機能の拡張について
▼テンプレート
[EC-CUBE]3.0.15
[データベース]MySQL5.7
[現象]
掲題の通り、検索機能の拡張についてプラグインを作成しています。
価格帯での検索を追加しようと試みたところ下記のエラーが発生してしまいました。
[Semantical Error] line 0, col 452 near 'prc_min >= 2000': Error: Class Eccube\Entity\ProductClass has no field or association named prc_min
エラーに続き出力されたクエリービルダの内容は下記の通りです。
SELECT p, MIN(pcp.price02) as prc_min , (case when pcs.stock_unlimited = false and pcs.stock = 0 then 1 else 0 end) as HIDDEN stock_is_no , MIN(pc.price02) as price02_min FROM Eccube\Entity\Product p INNER JOIN p.ProductClasses pcp INNER JOIN p.ProductCategories pct0 INNER JOIN pct0.Category c0 INNER JOIN p.ProductCategories pct3 INNER JOIN pct3.Category c3 INNER JOIN p.ProductClasses pcs INNER JOIN p.ProductClasses pc WHERE p.Status = 1 AND ((pcp.prc_min >= 2000 and pcp.prc_min < 5000)) AND pct0.Category IN(:Categories0) AND pct3.Category IN(:Categories3) AND (pcs.stock_unlimited = true OR pcs.stock > 0) GROUP BY p ORDER BY price02_min ASC, p.note ASC

価格帯以外にも条件が検索できるようになっており、価格帯の条件文を外すと正常に動作します。
なぜ価格帯について条件を付加するとこのようなエラーが発生するか分からず困っております。

もしお知恵をお貸しいただけたら幸いです。
何卒宜しくお願いします。

umebius
投稿日時: 2018/2/28 8:35
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: 検索機能の拡張について
引用:
pcp.prc_min >= 2000 and pcp.prc_min < 5000


上のようにpcp.prc_minと記載されている箇所がございますが、
「pcp.prc_min」ではなく、ただの「prc_min」ですとどうなりますか?


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

Morpheus
投稿日時: 2018/2/28 11:01
対応状況: −−−
新米
登録日: 2018/2/28
居住地:
投稿: 3
Re: 検索機能の拡張について
早速の返信ありがとうございます。
条件式から「pcp.」を削除すると

ContextErrorException in SqlWalker.php line 2252:
Notice: Undefined index: prc_min

となり、これもまた動かないのです。

またこの際には、クエリビルダの状況は出力されません。
umebius
投稿日時: 2018/2/28 11:09
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: 検索機能の拡張について
MIN(pcp.price02) as HIDDEN prc_min というように書かれているのでしょうか

クエリビルダの生成コードを拝見できますか?


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

Morpheus
投稿日時: 2018/2/28 11:28
対応状況: −−−
新米
登録日: 2018/2/28
居住地:
投稿: 3
Re: 検索機能の拡張について
ありがとうございます。

$qb = $this->createQueryBuilder('p')->andWhere('p.Status = 1');

// Price
$qb->addSelect('MIN(pcp.price02) as prc_min ');
$qb->innerJoin('p.ProductClasses', 'pcp');
$qb->groupBy('p');
$qb->andWhere( '(pcp.prc_min >= 2000 and pcp.prc_min < 5000)' );

// category
$qb
->innerJoin('p.ProductCategories', 'pct0')
->innerJoin('pct0.Category', 'c0')
->andWhere($qb->expr()->in('pct0.Category', ':Categories0'))
->setParameter('Categories0', $searchData['checkbox0']);


$qb
->innerJoin('p.ProductCategories', 'pct3')
->innerJoin('pct3.Category', 'c3')
->andWhere($qb->expr()->in('pct3.Category', ':Categories3'))
->setParameter('Categories3', $searchData['checkbox3']);

// stock
$qb->addSelect('(case when pcs.stock_unlimited = false and pcs.stock = 0 then 1 else 0 end) as HIDDEN stock_is_no ');
$qb->innerJoin('p.ProductClasses', 'pcs');
$qb->groupBy('p');
$qb->andWhere('pcs.stock_unlimited = true OR pcs.stock > 0');

// 価格低い順
$qb->addSelect('MIN(pc.price02) as HIDDEN price02_min');
$qb->innerJoin('p.ProductClasses', 'pc');
$qb->groupBy('p');
// postgres9.0以下は, groupBy('p.id')が利用できない
// mysqlおよびpostgresql9.1以上であればgroupBy('p.id')にすることで性能向上が期待できる.
// @see https://github.com/EC-CUBE/ec-cube/issues/1904
// $qb->groupBy('p.id');
$qb->orderBy('price02_min', 'ASC');
$qb->addOrderBy('p.note', 'DESC');

コードはこの上記のようになっています。
判定ロジックは取り除いております。
またこの価格に関わる部分を取り除く、もしくは条件から価格を外すと意図した通りの検索結果が表示されます。

※ProductRepositoryを継承し「getQueryBuilderBySearchData」メソッドを元に作成したメソッドになります。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1570
9
mcontact
1285
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.