【问题标题】:when i use where on json column on laravel return empty collection当我在 laravel 的 json 列上使用 where 时返回空集合
【发布时间】:2019-04-22 08:04:17
【问题描述】:

当我在laravel 中使用此代码时,json where

 $users = App\User::where('meta->Address->addressState','4');

Laravel 返回一个空集合

Illuminate\Database\Eloquent\Collection {#3909
   all: [],
}

我该如何解决这个问题?

【问题讨论】:

  • 试试这个:$users = App\User::where('meta->Address->addressState','4')->get();
  • 不,不工作 ->first() 工作但 get() 和另一个收集方法不工作!!!
  • meta 的 JSON 值是什么样的?
  • @kayvan 你解决了吗?

标签: json laravel collections eloquent where


【解决方案1】:

尝试使用whereJsonContains 喜欢

 $users = App\User::whereJsonContains('meta->Address->addressState', '4')->get();

你可以使用

$users = DB::table('users')
           ->where('meta->Address->addressState', '4')
           ->get();

我认为您可能需要删除引号的地方也可以正常工作

$users = App\User::where('meta->Address->addressState', 4)->get();

$users = App\User::where('meta->Address->addressState', "'4'")->get();

取决于您将其存储在数据库中的方式。

【讨论】:

  • @kayvan 你能确认AAddress的大写吗?
  • @kayvan 你能发布一些示例数据,包括列名,可能是截图吗?
【解决方案2】:
$users = App\User::where('meta->Address->addressState','4');

$data=$users->first();

如果您只想要一个具有 addressState 为 4 的表中的数据,这将起作用,如果您想要多个数据,您可以尝试这个

$data=$users->get();

【讨论】:

  • $user = App\User::where('meta->Address->addressState', '4'); => Illuminate\Database\Eloquent\Builder {#3059} >>> $data=$user->get(); => Illuminate\Database\Eloquent\Collection {#3079 all: [], } >>> 不工作我想用 where('meta->Address->addressState', '4')->get( );
  • 请确保您的表中有多个地址状态为 4 的数据
  • 先试试 $user=App\User::get(); dd($用户);这将从用户表中获取所有记录并尝试添加 where 条件
【解决方案3】:

有时会出现这个问题是因为数据库列类型是textLongText而必须有json列

如果使用 mariadb,则在运行 migrate 时默认将其创建 json 列作为 longtext

【讨论】:

    猜你喜欢
    • 2017-05-18
    • 2021-03-03
    • 2019-11-27
    • 2020-02-02
    • 2017-01-05
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    相关资源
    最近更新 更多