我有两个简单的清醒模型,分别称为Parent
(表父级)和Child
(表子级)。子表具有一个我们称为jsoncolumn
的JSON字段。
我的父模型与模型Child有一个belongsToMany关系。
children() {
return this.belongsToMany('App/Models/Child').pivotTable('parent_child');
}
我想从各个父级中获取父级的值,以及键
jsoncolumn
中字段key
中包含的值;为此,我想使用PostgreSQL运算符->
。使用Adonis Lucid语法,它提供以下代码:Parent.query().select('*')
.with('children', builder => {
builder.select(Database.raw("jsoncolumn->'key' AS foo"));
}).fetch();
问题,以下代码不起作用。即使在
Database.raw
子句中,运算符也用引号引起来,因此生成的select为:SELECT“ children”。“ jsoncolumn->'key'”
请注意,它也不允许使用任何功能。实际上,任何不是列名的东西都将不起作用。
为了做到这一点,正确的语法是什么?
最佳答案
要在MySQL服务器上查询JSON
数据类型,您需要按以下方式进行
SELECT columnOne, jsonColumn->'$.key' as Data FROM TableName;
我的意思是您有一个错误的sintax,因为您没有在
$.
之前使用builder.select(Database.raw("jsoncolumn->'$.key' AS foo"));
符号为什么?
正如我先前的实例向您展示的那样,您使用的简短的sintax要求使用它