我有一个带有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
发布于 2019-05-29 22:36:57
尝试使用whereJsonContains方法。在您的案例中:
DB::table('users')->whereJsonContaints('options', ['221' => 'en'])->get();发布于 2019-05-29 22:54:48
如果您将您的Laravel版本升级到5.6或更高版本,则->whereJsonContains()将可用。
如果您不想这样做,可以使用whereRaw查询。具体的实现取决于您拥有的DBMS:
SQL Server 2016
->whereRaw("JSON_VALUE(options, '$.221') = ?", ['en'])MySQL
->whereRaw("JSON_CONTAINS(options, 'en', '$.221') = 1")发布于 2019-05-30 00:11:59
在更高版本的Laravel中已修复此问题。
在Laravel 5.2中,您可以使用原始表达式:
DB::table('users')->whereRaw('`options`->\'$."221"\' = ?', ['en'])->get();https://stackoverflow.com/questions/56363067
复制相似问题