Laravel JSON Where子句,其中有数字输入

时间:2019-05-29 14:35:13

标签: php json laravel eloquent

我有带有json列“ options”的表。 例子:

 {"language":"en" }

当我查询时,可以:

DB::table('users')->where('options->language', 'en')->get();

但是如果我有数字键:

{"221":"en" }

我得到空数组:

DB::table('users')->where('options->221', 'en')->get();

我如何获得真实的查询? Laravel 5.2

3 个答案:

答案 0 :(得分:0)

尝试使用 <amp-web-push-widget visibility="unsubscribed" layout="fixed" width="245" height="45"> <!-- Custom banner goes here... --> </amp-web-push-widget> 方法。就您而言:

whereJsonContains

答案 1 :(得分:0)

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

如果您不希望这样做,可以使用whereRaw查询来完成。确切的实现取决于您拥有的DB​​MS:

SQL Server 2016

->whereRaw("JSON_VALUE(options, '$.221') = ?", ['en'])

MySQL

->whereRaw("JSON_CONTAINS(options, 'en', '$.221') = 1")

答案 2 :(得分:0)

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

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

DB::table('users')->whereRaw('`options`->\'$."221"\' = ?', ['en'])->get();