【问题标题】:Array to string conversion in Laravel using 'LIKE' query在 Laravel 中使用“LIKE”查询将数组转换为字符串
【发布时间】: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 数组

标签: php laravel-5.4


【解决方案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?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2020-11-21
    • 2013-07-11
    • 2013-02-07
    • 2021-09-02
    • 2019-09-13
    相关资源
    最近更新 更多