我正在寻找一种方法来利用Phalcon Framework中新的PostgreSQL JSON 运算符。
一个简单的表格来演示:
CREATE TABLE "user"
(
id_user serial NOT NULL,
data json,
CONSTRAINT pk_user PRIMARY KEY (id_user)
)
和一个运行良好的查询psql
:
select * from "user" where data->>'email' = 'john@example.com';
然而,当用于Phalcon 模型时:
$users = UserModel::query()
->where("data->>'email' = :email:")
->bind(['email' => 'john@example.com'])
->execute();
它产生语法错误:
ERROR: Syntax error, unexpected token >, near to '>'email' = :email:', when parsing: SELECT [Pht\Cli\Model\UserModel].* FROM [Pht\Cli\Model\UserModel] WHERE data->>'email' = :email:
我猜这与PHQL 解析器无法处理语法有关。但问题仍然存在:如何在 Phalcon 中使用 JSON 查询?
我试图将 JSON 语法包装到Db\RawValue中:
$users = UserModel::query()
->where(new RawValue("data->>'email' = 'john@example.com'"))
->execute();
但它似乎只用于更新/插入:
ERROR: Conditions must be string
我总是可以写一个原始查询,但这显然不是要走的路。Model::find
此外,如果在and中有可用的语法也会很好Model::findAll
。