Pea*_*gee 0 php postgresql json laravel eloquent
我正在尝试使用 jsonb 存在运算符 '?' 在 Laravel 的查询生成器中,并让它使用索引,但我遇到了一些问题。
示例查询
DB::table('table_name')->whereRaw("jsonb_column ? 'key'")->get();
样本索引
CREATE INDEX ON table_name USING GIN(jsonb_column jsonb_ops)
主要问题似乎是“?” 保留用于参数替换,因此该查询返回语法错误。我找到了几种解决此问题的方法,但每种方法都不是完整的解决方案。
使用 '??' (逃避的方法?) ->whereRaw("jsonb_column ?? 'key'")
SQLSTATE[42883]: Undefined function: 7 ERROR: operator does not exist: jsonb ?? unknownDB::select("SELECT * FROM table_name WHERE jsonb_column ?? 'key'"),但我需要它与查询生成器一起使用。使用命名函数/为运算符创建别名
->whereRaw("jsonb_exists(jsonb_column, 'key')")CREATE OPERATOR @-> ( PROCEDURE = jsonb_exists, LEFTARG = jsonb, RIGHTARG = text );
->whereRaw("jsonb_column @-> 'key'")现在我正在研究CREATE OPERATOR CLASS,作为让我的自定义运算符使用杜松子酒索引的一种方法,但这有点超出我的能力范围。如果有人能给我一些关于如何完成此任务的提示,或者更好的是一些更简单的解决方案,那将是一个巨大的帮助。
PHP 7.4 允许您使用以下方式转义占位符??:https ://wiki.php.net/rfc/pdo_escape_placeholders
DB::table('table_name')->whereRaw('jsonb_column ?? ?', ['key'])->get();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1760 次 |
| 最近记录: |