Как сгенерировать UUID при создании записи с помощью модели Adonis Lucid ORM? - PullRequest
0 голосов
/ 29 марта 2019

TL; DR

Мне нужна альтернатива Lucid ORM для выполнения запроса PGSQL

INSERT INTO "api_logs" ("request_id", "request_url", "request_method", "request_data", "response_data", "remark", "created_at", "updated_at")
VALUES (uuid_generate_v4(), NULL, 'POST', '{
    "test": "success"
}', '{
    "test": "success"
}', 'test', now(), now());

Я использую PostgresSQL с Adonis Node Framework, у меня есть таблица с именемapi_logs со следующей схемой:

id  integer Auto Increment [nextval('api_request_logs_id_seq')] 
request_id  uuid    
request_url character varying(255) NULL 
request_method  character varying(255) NULL [POST]  
request_data    json NULL   
response_data   json NULL   
created_at  timestamptz NULL    
updated_at  timestamptz NULL

Я пытаюсь создать запись, используя Adonis Lucid ORM, но она возвращает исключение.

Неудачные попытки:

await ApiRequestLog.create({
  request_id : uuid.v4(),
  request_url : request.url(),
  request_method : request.method(),
  request_data : request.all(),
  response_data : response_data,
  remark : 'Test Request with success response'
});

Ошибка: uuid не определен

await ApiRequestLog.create({
  request_url : request.url(),
  request_method : request.method(),
  request_data : request.all(),
  response_data : response_data,
  remark : 'Test Request with success response'
});

Ошибка:

нулевое значение в столбце "request_id"нарушает ненулевое ограничение

Заранее спасибо !!!

Best.

1 Ответ

0 голосов
/ 24 апреля 2019

После того, как я покачал свой мозг, я не смог найти решение с помощью Adonis JS, но я нашел способ внести изменения в PostgresQL.

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

Изменить таблицу, чтобы добавить UUID во время работы

ALTER "request_id" TYPE uuid,
ALTER "request_id" SET DEFAULT uuid_generate_v4(),
ALTER "request_id" SET NOT NULL;
COMMENT ON COLUMN "api_logs"."request_id" IS '';
COMMENT ON TABLE "api_logs" IS '';

работал для меня, надеюсь, это будет работать для всех.

...