質問 > フロント機能 > 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で使用するような関数が使えるようになります。
|
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
|
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');
|
santana |
投稿日時: 2017/4/1 22:25
対応状況: −−−
|
新米 登録日: 2017/4/1 居住地: 投稿: 4 |
Re: FIND_IN_SETでエラー umebius様
詳しいご回答ありがとうございます! 早速やってみたいと思います。 もう何時間もググって調べても分からなかったことが、ここで質問したらすぐに分かって感動です。感謝の気持ちでいっぱいです。 あの数時間は何だったんだろうか… |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |