Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Ошибка типа данных в knex (https://javascript.ru/forum/node-js-io-js/85965-oshibka-tipa-dannykh-v-knex.html)

Diadema 03.07.2024 11:20

Ошибка типа данных в knex
 
Подскажите, пожалуйста, знатоки!

Вот такой запрос к бд:

const [newItemdenUuid] = await DB.from('itemdens.itemden').where('core_uuid', itemdenID).whereNot('itemden_uuid', itemdenID).select('itemden_uuid');


Вот такая ошибка:

error: select "itemden_uuid" from "itemdens"."itemden" where "core_uuid" = $1 and not "itemden_uuid" = $2 - invalid input syntax for type uuid: "{"f7b434d4-fce8-44d0-be17-b87429c6ff33"}"

почему не нравится тип uuid?

Aetae 03.07.2024 15:58

Наверное потому что у тебя в переменной itemdenID лежит '{"f7b434d4-fce8-44d0-be17-b87429c6ff33"}' вместо 'f7b434d4-fce8-44d0-be17-b87429c6ff33'.

Diadema 03.07.2024 16:37

Цитата:

Сообщение от Aetae (Сообщение 555548)
Наверное потому что у тебя в переменной itemdenID лежит '{"f7b434d4-fce8-44d0-be17-b87429c6ff33"}' вместо 'f7b434d4-fce8-44d0-be17-b87429c6ff33'.

Да-да, я уже догадалась.
Непонятно только, почему селектом из бд подставляется объект, а не UUID . Объект надо как-то конвертировать в тип Uuid?

Aetae 03.07.2024 18:31

Diadema, по knex ничего не знаю, но по логике - select возвращает найденные rows, т.е. набор рядов с выбранными cells(колонками), а не значение одной cell одной row.

Могу предположить, что тут возвращает он массив объектов(т.к. может быть выбрано больше одной cell), и в данном случае что-то типа:
[{"itemden_uuid": "f7b434d4-fce8-44d0-be17-b87429c6ff33"}]
, т.к. найден один row и выбран один cell под именем itemden_uuid в нём.

Получить само значение, следовательно, надо либо руками:
const [{itemden_uuid: newItemdenUuid}] = await DB
  .from('itemdens.itemden')
  .where('core_uuid', itemdenID)
  .whereNot('itemden_uuid', itemdenID)
  .select('itemden_uuid');
, либо используя какие-то модификаторы knex(смотреть в документации).

Diadema 04.07.2024 11:30

Спасибо, но та же ошибка(((

Aetae 04.07.2024 13:16

Diadema, так ошибка в том что передаёте а не в том, что получаете.
Надо исправлять место где первый itemdenID берёте.

Ну или так как-то:
const [{itemden_uuid: newItemdenUuid}] = await DB
  .from('itemdens.itemden')
  .where('core_uuid', itemdenID.itemden_uuid)
  .whereNot('itemden_uuid', itemdenID.itemden_uuid)
  .select('itemden_uuid');

Но тут не уверен - хз, что там на самом деле у вас в itemdenID.

Diadema 05.07.2024 09:39

Цитата:

Сообщение от Aetae (Сообщение 555555)
Diadema, так ошибка в том что передаёте а не в том, что получаете.
Надо исправлять место где первый itemdenID берёте.

Ну или так как-то:
const [{itemden_uuid: newItemdenUuid}] = await DB
  .from('itemdens.itemden')
  .where('core_uuid', itemdenID.itemden_uuid)
  .whereNot('itemden_uuid', itemdenID.itemden_uuid)
  .select('itemden_uuid');

Но тут не уверен - хз, что там на самом деле у вас в itemdenID.

я дебагером прошлась - itemdenID - это array из одного элемента

Попробовала обернуть его вот так:
const [{itemdenID: newItemden}] = itemdenID;
Пишет, что undefined.

Aetae 05.07.2024 10:19

Ну значит так:
const [{itemden_uuid: newItemdenUuid}] = await DB
  .from('itemdens.itemden')
  .where('core_uuid', itemdenID[0].itemden_uuid)
  .whereNot('itemden_uuid', itemdenID[0].itemden_uuid)
  .select('itemden_uuid');

А лучше изучить js: работу c массивами, работу с объектами, console.log, debugger...
"Пробовать" всякую абра-кадабру можно очень долго.


Часовой пояс GMT +3, время: 03:03.