首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel JSON Where子句,键中有数字

Laravel JSON Where子句,键中有数字
EN

Stack Overflow用户
提问于 2019-05-29 22:35:13
回答 3查看 1.2K关注 0票数 1

我有一个带有json列"options“的表格。例如:

代码语言:javascript
复制
 {"language":"en" }

当我做查询时,这是可以的:

代码语言:javascript
复制
DB::table('users')->where('options->language', 'en')->get();

但如果我有数字键:

代码语言:javascript
复制
{"221":"en" }

我得到了空数组:

代码语言:javascript
复制
DB::table('users')->where('options->221', 'en')->get();

我怎样才能得到真正的查询?Laravel 5.2

EN

回答 3

Stack Overflow用户

发布于 2019-05-29 22:36:57

尝试使用whereJsonContains方法。在您的案例中:

代码语言:javascript
复制
DB::table('users')->whereJsonContaints('options', ['221' => 'en'])->get();
票数 1
EN

Stack Overflow用户

发布于 2019-05-29 22:54:48

如果您将您的Laravel版本升级到5.6或更高版本,则->whereJsonContains()将可用。

如果您不想这样做,可以使用whereRaw查询。具体的实现取决于您拥有的DBMS:

SQL Server 2016

代码语言:javascript
复制
->whereRaw("JSON_VALUE(options, '$.221') = ?", ['en'])

MySQL

代码语言:javascript
复制
->whereRaw("JSON_CONTAINS(options, 'en', '$.221') = 1")
票数 1
EN

Stack Overflow用户

发布于 2019-05-30 00:11:59

在更高版本的Laravel中已修复此问题。

在Laravel 5.2中,您可以使用原始表达式:

代码语言:javascript
复制
DB::table('users')->whereRaw('`options`->\'$."221"\' = ?', ['en'])->get();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56363067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档