質問 > フロント機能 > 検索窓で商品コードも検索したい |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
NSX-R |
投稿日時: 2019/3/2 5:51
対応状況: −−−
|
長老 登録日: 2012/12/14 居住地: 投稿: 234 |
検索窓で商品コードも検索したい ▼テンプレート
[EC-CUBE] 3.0.17 [レンタルサーバ] xserver [OS] Linux sv5320.xserver.jp 4.4.0-141-generic #167-Ubuntu SMP Wed Dec 5 10:40:15 UTC 2018 x86_64 [PHP] 7.1.18 お世話になっております 新しくeccube3をインストールし直して設定をしているところですが、 検索で商品コードを認識してくれません。システムエラーになってしまします。 参考にしているのはこちらです以前のバーションだと動いていたはずですが、3.0.17をインストールし直してからはシステムエラーになってしまいましす。 /src/Eccube/Repository/ProductRepository.php 117行目ぐらい // name if (isset($searchData['name']) && Str::isNotBlank($searchData['name'])) { $keywords = preg_split('/[\s ]+/u', $searchData['name'], -1, PREG_SPLIT_NO_EMPTY); foreach ($keywords as $index => $keyword) { $key = sprintf('keyword%s', $index); $qb ->andWhere(sprintf('NORMALIZE(p.name) LIKE NORMALIZE(:%s) OR NORMALIZE(p.search_word) LIKE NORMALIZE(:%s)', $key, $key)) ->setParameter($key, '%' . $keyword . '%'); } } を // name if (isset($searchData['name']) && Str::isNotBlank($searchData['name'])) { $keywords = preg_split('/[\s ]+/u', $searchData['name'], -1, PREG_SPLIT_NO_EMPTY); foreach ($keywords as $index => $keyword) { $key = sprintf('keyword%s', $index); //$qb // ->andWhere(sprintf('NORMALIZE(p.name) LIKE NORMALIZE(:%s) OR NORMALIZE(p.search_word) LIKE NORMALIZE(:%s)', $key, $key)) // ->setParameter($key, '%' . $keyword . '%'); $qb ->andWhere(sprintf('NORMALIZE(p.name) LIKE NORMALIZE(:%s) OR NORMALIZE(p.search_word) LIKE NORMALIZE(:%s) OR NORMALIZE(p.description_detail) LIKE NORMALIZE(:%s) OR NORMALIZE(p.description_list) LIKE NORMALIZE(:%s) OR NORMALIZE(pc.code) LIKE NORMALIZE(:%s)', $key, $key, $key, $key, $key)) ->setParameter($key, '%' . $keyword . '%'); } } をこのようにして、商品コードを pc.code としているんです。 解決方法を教えていただけませんでしょうか? どうぞよろしくお願います。 |
468 |
投稿日時: 2019/3/2 11:21
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 検索窓で商品コードも検索したい pcのjoinを忘れている可能性はありませんか?
|
NSX-R |
投稿日時: 2019/3/2 13:01
対応状況: −−−
|
長老 登録日: 2012/12/14 居住地: 投稿: 234 |
Re: 検索窓で商品コードも検索したい siro8 様ありがとうございます。
具体的にはjoinはどのように使うのでしょうか? ほかのファイルも変更するのでしょうか? よろしくお願います。 |
hmorita_j |
投稿日時: 2019/3/2 14:12
対応状況: −−−
|
長老 登録日: 2017/3/3 居住地: 沈黙の巨大都市松戸 投稿: 222 |
Re: 検索窓で商品コードも検索したい 同じファイル内のgetQueryBuilderBySearchDataForAdmin()を見ると参考になると思います。
|
NSX-R |
投稿日時: 2019/3/2 15:31
対応状況: 解決済
|
長老 登録日: 2012/12/14 居住地: 投稿: 234 |
Re: 検索窓で商品コードも検索したい siro8様
解決できました、どうもありがとうございました。 単純に->innerJoin('p.ProductClasses', 'pc')を付け足せばよかったんですね。 解決できた喜びは感動です!^^) 今後ともどうぞよろしくおねがいしますm(_ _)m 117行目以降 // name if (isset($searchData['name']) && Str::isNotBlank($searchData['name'])) { $keywords = preg_split('/[\s ]+/u', $searchData['name'], -1, PREG_SPLIT_NO_EMPTY); foreach ($keywords as $index => $keyword) { $key = sprintf('keyword%s', $index); $qb ->innerJoin('p.ProductClasses', 'pc') ->andWhere(sprintf('NORMALIZE(p.name) LIKE NORMALIZE(:%s) OR NORMALIZE(pc.code) LIKE NORMALIZE(:%s) OR NORMALIZE(p.search_word) LIKE NORMALIZE(:%s)', $key, $key, $key)) ->setParameter($key, '%' . $keyword . '%'); } } |
NSX-R |
投稿日時: 2019/3/2 17:43
対応状況: −−−
|
長老 登録日: 2012/12/14 居住地: 投稿: 234 |
Re: 検索窓で商品コードも検索したい すみません、解決できたと思ったらエラーが出てしまいました。
キーワード一個だと大丈夫なんですが、 スペースで区切って複数キーワードだとシステムエラーになってしまいます。 その場合はどこをいじればよいのでしょうか? |
468 |
投稿日時: 2019/3/2 18:35
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 検索窓で商品コードも検索したい joinはforeachの外(ループの外)で指定してください。
出ているエラーは、すでにjoinされていますというものではないですか?
|
NSX-R |
投稿日時: 2019/3/2 19:47
対応状況: 解決済
|
長老 登録日: 2012/12/14 居住地: 投稿: 234 |
Re: 検索窓で商品コードも検索したい siro8様
何度もアドバイスありがとうございました。 foreachの外に設定したらうまくいきました。 本当にありがとうございました。 // name if (isset($searchData['name']) && Str::isNotBlank($searchData['name'])) { $keywords = preg_split('/[\s ]+/u', $searchData['name'], -1, PREG_SPLIT_NO_EMPTY); $qb->innerJoin('p.ProductClasses', 'pc'); foreach ($keywords as $index => $keyword) { $key = sprintf('keyword%s', $index); $qb ->andWhere(sprintf('NORMALIZE(p.name) LIKE NORMALIZE(:%s) OR NORMALIZE(pc.code) LIKE NORMALIZE(:%s) OR NORMALIZE(p.search_word) LIKE NORMALIZE(:%s)', $key, $key, $key)) ->setParameter($key, '%' . $keyword . '%'); } } 追加:商品説明文からも検索 商品説明(description_detail) // name if (isset($searchData['name']) && Str::isNotBlank($searchData['name'])) { $keywords = preg_split('/[\s ]+/u', $searchData['name'], -1, PREG_SPLIT_NO_EMPTY); $qb->innerJoin('p.ProductClasses', 'pc'); foreach ($keywords as $index => $keyword) { $key = sprintf('keyword%s', $index); $qb ->andWhere(sprintf('NORMALIZE(p.name) LIKE NORMALIZE(:%s) OR NORMALIZE(pc.code) LIKE NORMALIZE(:%s) OR NORMALIZE(p.search_word) LIKE NORMALIZE(:%s) OR NORMALIZE(p.description_detail) LIKE NORMALIZE(:%s)', $key, $key, $key, $key)) ->setParameter($key, '%' . $keyword . '%'); } } |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |