我有两个简单的清醒模型,分别称为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要求使用它

10-02 13:08