Выберите ключ поля JSON в подзапросе Adonis Lucid - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть две простые ясные модели, называемые Parent (таблица родителей) и Child (таблица детей). В таблице детей есть поле JSON, которое мы называем jsoncolumn.

Моя родительская модель имеет отношение ownToMany к модели Child.

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 оператор указан в кавычках ... поэтому сгенерированный выбор:

ВЫБЕРИТЕ "children". "Jsoncolumn -> 'key'"

Обратите внимание, что он также не позволяет использовать какую-либо функцию. Все, что не является именем столбца, фактически не будет работать.

Какой будет правильный синтаксис для этого?

1 Ответ

0 голосов
/ 02 января 2019

Чтобы сделать запрос к типу данных JSON на MySQL Server, вам нужно сделать следующее:

SELECT columnOne, jsonColumn->'$.key' as Data FROM TableName;

Я имею в виду, что у вас неправильный синтаксис, так как вы не используете знак $. доbuilder.select(Database.raw("jsoncolumn->'$.key' AS foo"));

Почему?

Короткий синтаксис, который вы используете, требует его, как показывают мои предыдущие примеры

...