在 laravel 雄辩的 json 列内查询
Querying inside json column in laravel elequent
我有一个名为 orders
的模型,它有一个 info
json 列。
在那个 json 我有一个 属性 叫做 id
。例如,现在我想检索 ID 为 6
的所有订单。所以我是这样做的:
$order = \DB::table('orders')
->where('info.id',$value)
// ->where('info->id',$value)
// ->whereRaw('JSON_EXTRACT(`info` , "$.id") = '.$value)
->first();
第三个 whereRaw
正在工作,但我认为它有一个错误,因为在我的验证第三个或第四个 returns 这个错误太奇怪了:
Column not found: 1054 Unknown column '6112 ' in 'where clause' (SQL: select * from `orders` where JSON_EXTRACT(`info` , "$.id") = 6112 limit 1)
它是如何将列值误认为列名的,这很奇怪,因为当我 dd
我从查询中获取值时它在第一个上工作,但它像第 4 个一样中断。
现在我想知道是否有更简单的解决方案可以在 json 字段上使用 where 或者 whereRaw
有什么问题
Laravel 支持在支持 JSON 列类型的数据库上查询 JSON 列类型。
目前,这包括 MySQL 5.7+、PostgreSQL、SQL Server 2016 和 SQLite 3.9.0(带有 JSON1 extension ).
要查询 JSON 列,请使用 ->
运算符:
$order = DB::table('orders')
->where('info->id', $value)
->first();
文档中的其他信息:JSON Where Clauses
您可以使用 whereJsonContains
查询 JSON 数组。 SQLite 数据库不支持此功能:
$users = DB::table('users')
->whereJsonContains('options->languages', 'en')
->get();
如果您的应用程序使用 MySQL 或 PostgreSQL 数据库,您可以将值数组传递给 whereJsonContains
方法:
$users = DB::table('users')
->whereJsonContains('options->languages', ['en', 'de'])
->get();
您可以使用 whereJsonLength
方法按长度查询 JSON 个数组:
$users = DB::table('users')
->whereJsonLength('options->languages', 0)
->get();
$users = DB::table('users')
->whereJsonLength('options->languages', '>', 1)
->get();
我有一个名为 orders
的模型,它有一个 info
json 列。
在那个 json 我有一个 属性 叫做 id
。例如,现在我想检索 ID 为 6
的所有订单。所以我是这样做的:
$order = \DB::table('orders')
->where('info.id',$value)
// ->where('info->id',$value)
// ->whereRaw('JSON_EXTRACT(`info` , "$.id") = '.$value)
->first();
第三个 whereRaw
正在工作,但我认为它有一个错误,因为在我的验证第三个或第四个 returns 这个错误太奇怪了:
Column not found: 1054 Unknown column '6112 ' in 'where clause' (SQL: select * from `orders` where JSON_EXTRACT(`info` , "$.id") = 6112 limit 1)
它是如何将列值误认为列名的,这很奇怪,因为当我 dd
我从查询中获取值时它在第一个上工作,但它像第 4 个一样中断。
现在我想知道是否有更简单的解决方案可以在 json 字段上使用 where 或者 whereRaw
Laravel 支持在支持 JSON 列类型的数据库上查询 JSON 列类型。
目前,这包括 MySQL 5.7+、PostgreSQL、SQL Server 2016 和 SQLite 3.9.0(带有 JSON1 extension ).
要查询 JSON 列,请使用 ->
运算符:
$order = DB::table('orders')
->where('info->id', $value)
->first();
文档中的其他信息:JSON Where Clauses
您可以使用 whereJsonContains
查询 JSON 数组。 SQLite 数据库不支持此功能:
$users = DB::table('users')
->whereJsonContains('options->languages', 'en')
->get();
如果您的应用程序使用 MySQL 或 PostgreSQL 数据库,您可以将值数组传递给 whereJsonContains
方法:
$users = DB::table('users')
->whereJsonContains('options->languages', ['en', 'de'])
->get();
您可以使用 whereJsonLength
方法按长度查询 JSON 个数组:
$users = DB::table('users')
->whereJsonLength('options->languages', 0)
->get();
$users = DB::table('users')
->whereJsonLength('options->languages', '>', 1)
->get();