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();

否则,如果您的一个选项与最后的另一个选项相似,您可能会遇到问题(如果您有 fishgoldfish 作为可能的类别,使用 LIKE ',fish,' 将保证你不匹配 goldfish,而 LIKE 'fish,' 会同时匹配 fishgoldfish)。

我建议像这样存储您的类别:/fish/goldfish/water/ 然后使用 LIKE '%/yourcategory/%'

进行过滤