Phi*_*ühn 6 php postgresql laravel jsonb laravel-5
我在 JSONB 字段中获取了以下数据:
\n\n[\n \'first_name\' => \'Philipp\',\n \'last_name\' => \'K\xc3\xbchn\',\n \'size\' => 170,\n \'hobbies\' => [\n \'daily\' => \'beer\',\n ],\n \'skills\' => [\n \'drink beer\',\n \'drink more beer\',\n ],\n]\nRun Code Online (Sandbox Code Playgroud)\n\n我对 Laravel 和 Postgres 还很陌生,所以我想做一些基本的查询。
\n\n以下是一些运行良好的查询:\n(json 是列的名称)
\n\n$users = User::whereRaw("json ->> \'first_name\' = \'Philipp\'")->get();\n\n$users = User::whereRaw("json ->> \'size\' > \'160\'")->get();\n\n$users = User::whereRaw("json #>> \'{hobbies, daily}\' = \'beer\'")->get();\nRun Code Online (Sandbox Code Playgroud)\n\n现在我想检查是否drink beer在skills并且以下代码不起作用:
$users = User::whereRaw("json -> \'skills\' ? \'drink beer\'")->get();\nRun Code Online (Sandbox Code Playgroud)\n\n这里我遇到了一个语法错误:
\n\nSQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "$1"\nLINE 1: select * from "users" where json ->> \'skills\' $1 \'drink beer...\n^ (SQL: select * from "users" where json ->> \'skills\' ? \'drink beer\')\nRun Code Online (Sandbox Code Playgroud)\n\n我怎样才能搜索drink beer?
正如 Twitter 上的 @tapoueh 所建议的,也许解决方法是使用运算符的底层函数:jsonb_exists(jsonb, text)。所以你的查询是
$users = User::whereRaw("jsonb_exists(json -> 'skills', 'drink beer')")->get();
Run Code Online (Sandbox Code Playgroud)
由@docteur_klein 添加:类似问题的链接。
| 归档时间: |
|
| 查看次数: |
11902 次 |
| 最近记录: |