バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > FIND_IN_SETでエラー

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
santana
投稿日時: 2017/4/1 21:42
対応状況: −−−
新米
登録日: 2017/4/1
居住地:
投稿: 4
FIND_IN_SETでエラー
はじめまして
現在EC-CUBE3を使ってサイトを構築中です。
どれだけググっても分からなかったので、こちらで質問させて頂きます。

デフォルトでは商品検索は部分一致ですが、これを完全一致にしたいと思っています。
商品情報のキーワードはカンマ区切りなので、MySQLのFIND_IN_SETを使ったところエラーになりました。

エラー内容:
Error: Expected known function, got 'FIND_IN_SET'

直接クエリをMySQLで打つと正常に検索されます。
これはSymfonyがFIND_IN_SETに対応していないということなのでしょうか?
これが使えないとなると、カンマ区切りの完全一致検索をどうしたらいいのか…

どなたかお分かりでしたらご教授願います。
よろしくお願いします。
t_tsuru
投稿日時: 2017/4/1 21:54
対応状況: −−−
半人前
登録日: 2012/8/9
居住地:
投稿: 11
Re: FIND_IN_SETでエラー
おそらく、SQLを直書きしないでDQL内に書いているのではないでしょうか。
また、Symfonyが「FIND_IN_SET」に対応していないわけではなく、DoctrineのDQL内に定義されていない「FIND_IN_SET」が使えないということです。

FIND_IN_SET を使いたいのであれば、下記のように「FIND_IN_SET」を定義すればDQL内で使えます。
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/dql-user-defined-functions.html

もしくは ProductからリレーションするTag Entityを作成し、tag に対してWHERE INしてはいかがでしょうか。
umebius
投稿日時: 2017/4/1 22:04
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: FIND_IN_SETでエラー
おそらく自身で定義ファイルを書くのは難しいと思うのですが
こういうExtensionがあるので導入してみてください。

https://github.com/beberlei/DoctrineExtensions

FIND_IN_SET 、GROUP_CONCAT、 FIELDなど普段PDOで使用するような関数が使えるようになります。


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

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

umebius
投稿日時: 2017/4/1 22:09
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: FIND_IN_SETでエラー

ちなみにComposerを使用してインストールしても良いですし、
DLして設置しても良いです。
下記ファイル(FIND_IN_SET)だけ導入することも可能です。

https://github.com/beberlei/DoctrineExtensions/blob/master/src/Query/Mysql/FindInSet.php


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

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

santana
投稿日時: 2017/4/1 22:11
対応状況: −−−
新米
登録日: 2017/4/1
居住地:
投稿: 4
Re: FIND_IN_SETでエラー
t_tsuru様、ご回答ありがとうございます。

なるほど、そういうことでしたか。
SymfonyはEC-CUBE3で初めて触ったので、まだまだ分からないことだらけなのです。
大変勉強になりました!ありがとうござました。
santana
投稿日時: 2017/4/1 22:16
対応状況: −−−
新米
登録日: 2017/4/1
居住地:
投稿: 4
Re: FIND_IN_SETでエラー
umebius様

ご回答ありがとうございます

こんな便利なものがあったんですね。
これは是非使わせて頂きます!

ちなみに、DLした場合、どこにファイルをおけばいいのでしょうか

よろしくお願いします。
umebius
投稿日時: 2017/4/1 22:21
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: FIND_IN_SETでエラー
どこでも構わないですが私は下記パスに置いています。
src/Eccube/DoctrineExtensions/


個別に使う場合、こんな感じで登録してやります。
$config = $app['orm.em']->getConfiguration();
$config->addCustomStringFunction('FindInSet', 'DoctrineExtensions\Query\Mysql\FindInSet');


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

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

santana
投稿日時: 2017/4/1 22:25
対応状況: −−−
新米
登録日: 2017/4/1
居住地:
投稿: 4
Re: FIND_IN_SETでエラー
umebius様

詳しいご回答ありがとうございます!
早速やってみたいと思います。

もう何時間もググって調べても分からなかったことが、ここで質問したらすぐに分かって感動です。感謝の気持ちでいっぱいです。

あの数時間は何だったんだろうか…
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

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.