ВЫБЕРИТЕ определенные поля в типе данных MySQL JSON Column, используя книжную полку или Knex ORM - PullRequest
0 голосов
/ 11 января 2019

Предположим, у меня есть следующая структура таблицы MySQL:

=============================================== =========== | id | имя | адрес | ++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++

| 1 | Рассвет | {"штат": "Мэриленд", "город": "Аннаполис"} |

| 2 | Пабло | {"штат": "Огайо", "город": "Колумб"} |

Адресный столбец имеет тип json. Я использую книжную полку и knex ORM в своем приложении, мне нужно сделать запрос, чтобы он получал имя и название штата без города. Мой простой SQL-запрос будет выглядеть так:

выберите имя, адрес -> "$. Штат" от пользователя

OR

выберите имя, json_extract (адрес, "$ .state") от пользователя

Но когда я делаю это, используя Книжную полку: user.select ('name', 'address -> "$. state"'). fetch (). then (....)

Я получаю недопустимую ошибку в команде SQL из-за формата кавычек и обратной косой черты. SQL, сгенерированный с использованием книжной полки, выглядит следующим образом:

выберите 'address -> \ "' .'state \" ',' name 'из `user.

Какие-либо предложения, чтобы избежать проблемы с меткой обратного удара вокруг символа Dot (.) Или какой-то другой подход?

PS: это всего лишь пример

1 Ответ

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

Вы можете сгенерировать эти запросы следующим образом:

// select name, address->"$.state" from user
knex('user').select('name', knex.raw('??->"$.state"', ['address']))

// select name, json_extract(address, "$.state") from user
knex('user').select('name', knex.raw('json_extract(??, "$.state")', ['address']))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...