Laravel WhereIn 字段本身有多个选项
Laravel WhereIn with multiple options in the field itself
通常 Eloquent 中的 whereIn 会将字段中的值与带有选项的数组进行比较。我喜欢将其反转并将一个选项与该字段中的多个选项进行比较:
字段包含 'option1,option2,option3'
Model::whereIn('field', 'option1')->get();
这可能吗?
您可以使用 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();
在开头加一个逗号(或者任何其他分隔符,如果重要的话)会使它变得更好:
Model::where('field', 'LIKE', '%,option1,%')->get();
否则,如果您的一个选项与最后的另一个选项相似,您可能会遇到问题(如果您有 fish
和 goldfish
作为可能的类别,使用 LIKE ',fish,'
将保证你不匹配 goldfish
,而 LIKE 'fish,'
会同时匹配 fish
和 goldfish
)。
我建议像这样存储您的类别:/fish/goldfish/water/
然后使用 LIKE '%/yourcategory/%'
进行过滤
通常 Eloquent 中的 whereIn 会将字段中的值与带有选项的数组进行比较。我喜欢将其反转并将一个选项与该字段中的多个选项进行比较:
字段包含 'option1,option2,option3'
Model::whereIn('field', 'option1')->get();
这可能吗?
您可以使用 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();
在开头加一个逗号(或者任何其他分隔符,如果重要的话)会使它变得更好:
Model::where('field', 'LIKE', '%,option1,%')->get();
否则,如果您的一个选项与最后的另一个选项相似,您可能会遇到问题(如果您有 fish
和 goldfish
作为可能的类别,使用 LIKE ',fish,'
将保证你不匹配 goldfish
,而 LIKE 'fish,'
会同时匹配 fish
和 goldfish
)。
我建议像这样存储您的类别:/fish/goldfish/water/
然后使用 LIKE '%/yourcategory/%'