2016-12-19 4 views
0

通常、EloquentのwhereInは、フィールドの値とoptionsを持つ配列を比較します。私はそれを逆にし、フィールドに複数のオプションをオプションを比較したい:Laravel WhereInフィールド内に複数のオプションがある

フィールドには「オプション1、オプション2、オプション3」これが可能である

Model::whereIn('field', 'option1')->get(); 

が含まれていますか?

+0

を使用してフィルタリングします複数の値を持つ – AntoineB

+0

私は知っていますが、それはカテゴリに基づいてアイテムを表示する非常に簡単な方法です。私はこのために自分のデータベース設計を過度に複雑化したくありません。 – klaaz

+0

あなた自身の問題に基づいて見ることができますが、それは良い解決策ではありません。 – AntoineB

答えて

1

あなたはLIKEを使用してクエリを行うことができます。構文の

Model::where('field', 'LIKE', '%option1%')->get(); 

ドキュメントがここにあります:http://dev.mysql.com/doc/refman/5.7/en/pattern-matching.html

あなたはいつもあなたが使用できるoption1,option2,option3,のような、でも最後の選択肢の後にコンマ,を追加する場合より堅牢なフィルタのビット:

Model::where('field', 'LIKE', '%option1,%')->get(); 

開始時にコンマそれが重要な場合は、他のセパレータ)は、それがさらに良くなるだろう:あなたのオプションの一つが最後に別のものと類似している場合は、可能なカテゴリとしてfishgoldfishを持っている場合

Model::where('field', 'LIKE', '%,option1,%')->get(); 

は、そうでなければ、あなたが(問題を持つことができ、LIKE ',fish,'を使用してはfishgoldfishの両方に一致しますが、goldfishと一致しないことが保証されます。

私はそのようなあなたのカテゴリを格納するのにお勧めしたい:/fish/goldfish/water/、その後、あなたは複数の値が必要な場合は関係なく、フィールドを持つ専用のテーブルをすることができ、データベースの設計を変更することを検討すべきであるLIKE '%/yourcategory/%'

+0

オプションが同じ文字で始まる場合は、「厳密」ではありません。 – klaaz

+0

最後の部分を参照してください。これは、あなたが話している問題に対してより頑強になります。 – AntoineB

+0

あなたの答えは「成長しています」と思っています。私は最もスラッシュのあるソリューションが好きです。 – klaaz

関連する問題