在 Laravel 中使用“LIKE”查询将数组转换为字符串
Posted
技术标签:
【中文标题】在 Laravel 中使用“LIKE”查询将数组转换为字符串【英文标题】:Array to string conversion in Laravel using 'LIKE' query 【发布时间】:2018-01-25 20:48:15 【问题描述】:很抱歉有一个新手问题。 我遇到了一个问题。我想在数据库中搜索数组中的值。 但我有一个错误:
数组到字符串的转换
有点明白为什么,但是,我不知道如何使它正确。你能帮我吗? 这是我的代码:
public function chassis($chassis)
return $this->builder->whereIn('model_type_en', 'LIKE', (array)"%$chassis%");
P.S 请不要笑我:)
【问题讨论】:
喜欢和在哪里是完全不同的东西。生成器可能会调用带有两个参数字段名和字符串的方法。使用它而不转换为数组(数组)。 很难,我需要一个解决方案。应用程序中的人希望一次输入多个底盘编号,结果应显示全部或至少与它们相似 问题是mysql不支持with数组,而是需要创建多个用OR连接的like语句。但是,请注意,像这样的大量喜欢会使查询效率非常低 @MaciejPaprocki yaa 我有点想放弃 LIKE,只需使用 whereIN 数组 【参考方案1】:$collection = DB::table('your_table')->select('*');
foreach($chassis as $key=>$val)
if($key == 0)
$collection->where('model_type_en', 'like', "%$val%"));
$collection->orWhere('model_type_en', 'like', "%$val%"));
$name = $collection->get();
这可能有效。你也可以看看参考:laravel querybuilder how to use like in wherein function
(原错答案:)
如果chassis
是一个字符串,你可以这样做:
$this->builder->where('model_type_en', 'LIKE', "%$chassis%");
您可以阅读文档:https://laravel.com/docs/5.4/queries
【讨论】:
我担心他仍然会得到数组到字符串的转换 机箱是一个数组:) 我喜欢纯 laravel 解决方案,虽然这可能应该在嵌套 where 因为 OR 语句的数量,以避免在添加更多条件时混淆 谢谢。给我一些时间试试【参考方案2】:你可以像确保 $chassis 是一个数组一样使用
public function chassis($chassis)
return $this->builder->whereIn('model_type_en', $chassis);
【讨论】:
虽然这样解决了数组到字符串的转换问题,但是他不能像w LIKE条件那样使用通配符 如果你想使用 whereIn() 那么不需要使用 LIKE 但他的问题表明他需要 LIKE 和 IN【参考方案3】:您要做的是 IN 和 LIKE 的组合。
我建议RLIKE 这是一个 LIKE 但带有 REGEX。
虽然这是特定于 mysql 的,但我怀疑是否有 Laravel 构建可以做到这一点。
更新
很遗憾,我弄错了,尽管 RLIKE 可以做到。而是在这里的这篇文章中找到你的答案: Is there a way to combine IN and LIKE in MySQL?
【讨论】:
以上是关于在 Laravel 中使用“LIKE”查询将数组转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 中使用 LIKE 语句使用查询结果并再次查询
LARAVEL 5.8 - 在 foreach 中使用数组的 WHERE LIKE 子句的多个条件没有给出完整的结果
如何使用 LIKE 关键字和在 laravel 查询生成器中传递变量来制作自定义 orderBy 或 DB::raw(FIELD())