Выберите ключ поля JSON в подзапросе Adonis Lucid

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

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

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'"

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

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

0 ответов

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

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

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

Зачем?

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

Другие вопросы по тегам