Генерация UUID в Adonisjs и MySQL не работает - PullRequest
1 голос
/ 23 сентября 2019

У меня проблема с пониманием того, как создать UUID в моей базе данных adonisjs, использующей MySQL.Когда я запускаю сервер и публикую данные, этот вывод id_customer все еще находится в модели автоинкремента.Кто-нибудь может помочь мне, как решить эту проблему?

Это код схемы в моем файле миграции:

async up () {
    await this.db.raw('CREATE EXTENSION IF NOT EXISTS "uuid-ossp";')
  }
  up () {
    this.create('customers', (table) => {
      table.increments()
      table.uuid('id_customer').primary().defaultTo(this.db.raw('uuid_generate_v4()'))
      table.timestamps()
    })
  }

1 Ответ

1 голос
/ 26 сентября 2019

Но вы можете добиться этого, добавив Hook в свою модель Lucid.

Сначала создайте customer схему следующим образом:

"use strict";

const Schema = use("Schema");

class Customer extends Schema {
  up() {
    this.create("customers", table => {
      table.uuid("id").primary();

      // Rest of your schema
    });
  }

  down() {
    this.drop("customers");
  }
}

module.exports = Customer;

Давайте создадим хук с именем CustomerHook, используяcmd adonis make:hook Customer

"use strict";

const uuidv4 = require("uuid/v4");

const CustomerHook = (exports = module.exports = {});

CustomerHook.uuid = async customer => {
  customer.id = uuidv4();
};

Добавьте эти строки в вашу Customer модель

"use strict";

const Model = use("Model");

class Customer extends Model {
  static boot() {
    super.boot();
    this.addHook("beforeCreate", "CustomerHook.uuid");
  }

  static get primaryKey() {
    return "id";
  }

  static get incrementing() {
    return false;
  }

  // Rest of the model
}

module.exports = Customer;

При вставке данных клиента по умолчанию будет создан уникальный UUID.

Подробнее об крючке Адониса читайте здесь: https://adonisjs.com/docs/4.1/database-hooks

...