在 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 中找到整个单词?

Laravel 使用 LIKE 查询不返回任何结果

如何使用 LIKE 关键字和在 laravel 查询生成器中传递变量来制作自定义 orderBy 或 DB::raw(FIELD())

在 Laravel 中使用 Eloquent ORM 使用 LIKE 执行数据库搜索