【问题标题】:Laravel 8.x Where Json Search In ArrayLaravel 8.x 在哪里 Json 在数组中搜索
【发布时间】:2021-02-06 18:57:41
【问题描述】:

我的 DB 列字段(“颜色”)包含一个结构如下的数组:

["1","2","3"]

我当前的查询看起来像这样,为了更好的例子而简化:

$value = '1';

$cards = Card::query()
->where('colors', 'like', '%' . $value . '%')
->get();

问题是,它从其他列获取数据,例如["5","8","13"] 将匹配"13" 而不是严格的$value,它应该是"1"

如何以正确的方式编写此查询?

【问题讨论】:

  • 你试过whereJsonContains('colors', 1)吗?假设这实际上是一个 json 列

标签: php mysql laravel eloquent


【解决方案1】:

这里使用whereJsonContains方法

像这样的值然后像那样做 ["1","2","3"]

$cards = Card::query()
->whereJsonContains('colors', '1')
->get();

如果像 [1,2,3] 这样的值然后像那样使用

$cards = Card::query()
    ->whereJsonContains('colors', 1)
    ->get();

【讨论】:

    【解决方案2】:

    你可以把它和引号一起匹配

    $cards = Card::query()
    ->where('colors', 'like', '%"' . $value . '"%')
    ->get();
    

    【讨论】:

    • 谢谢,这也可以,我认为我更喜欢 json 方法,因为它确实是一个 json 列。
    • 是的 :) 也应该比 like 我假设更快
    【解决方案3】:

    您可以按如下方式查询JSON数组字段

    $cards = Card::query()
    ->whereNotNull("colors->$value")
    ->get();
    

    上述查询将返回$value中具有颜色的卡片

    【讨论】:

      猜你喜欢
      • 2016-09-09
      • 2015-11-03
      • 1970-01-01
      • 2022-01-20
      • 2014-09-15
      • 2023-02-23
      • 2021-10-22
      • 2021-01-11
      • 1970-01-01
      相关资源
      最近更新 更多