我有两个简单的清晰模型,称为Parent
(表父级)和Child
(表子级)。子表有一个 JSON 字段,我们称之为 jsoncolumn
。
我的父模型与模型子模型具有belongsToMany 关系。
children() {
return this.belongsToMany('App/Models/Child').pivotTable('parent_child');
}
我想从各个父项中获取父项的值,以及键 key
处的字段 jsoncolumn
中包含的值;为此,我想使用 PostgreSQL 运算符 ->
。使用 Adonis Lucid 语法,它给出以下代码:
Parent.query().select('*')
.with('children', builder => {
builder.select(Database.raw("jsoncolumn->'key' AS foo"));
}).fetch();
问题,下面的代码不起作用。即使在 Database.raw
子句中,运算符被引用...所以生成的选择是:
SELECT "children"."jsoncolumn->'key'"
请注意,它也不允许使用任何功能。实际上,任何不是列名的名称都不起作用。
执行此操作的正确语法是什么?
最佳答案
要在 MySQL 服务器上查询 JSON
数据类型,您需要按以下方式执行
SELECT columnOne, jsonColumn->'$.key' as Data FROM TableName;
我的意思是你的语法不正确,因为你在 builder.select(Database.raw("jsoncolumn->'$.key' AS foo"之前没有使用
$.
符号) ));
为什么?
您使用的简短语法需要它,正如我之前的示例向您展示的那样
关于javascript - 在 Adonis Lucid 子查询上选择 JSON 字段键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53284497/