Миграция в Knex.js - не может установить внешний ключ в пустое поле - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть таблица, где у меня есть обязательное ограничение внешнего ключа.Мне нужно сделать это ограничение необязательным, поэтому нет ограничений, если значение равно нулю, в противном случае оно должно применять ограничение.

Я пишу миграцию в Knex.js, и у меня есть следующая миграция.Каждое из 3 операторов работает изолированно, но если сделать столбец обнуляемым, я не могу добавить внешний ключ обратно.

exports.up = knex => {
  return knex.schema
    // Statement 1
    .table("waypoints", table => {
      table.dropForeign("port_id");
    })
    // Statement 2
    .alterTable("waypoints", table => {
      table
        .integer("port_id")
        .nullable()
        .alter();
    })
    // Statement 3
    .table("waypoints", table => {
      table.foreign("port_id").references("port.id");
    });
};

Как я могу сделать этот столбец необязательным?

1 Ответ

0 голосов
/ 24 сентября 2019

В итоге получилось использовать knex.raw():

exports.up = knex => {
  return knex.raw(
    "ALTER TABLE `waypoints` CHANGE `suggested_route_id` `suggested_route_id` INT(10) UNSIGNED NULL;"
  );
};

exports.down = knex => {
  return knex.raw(
    "ALTER TABLE `waypoints` CHANGE `suggested_route_id` `suggested_route_id` INT(10) UNSIGNED NOT NULL;"
  );
};

Не удалось найти способ сделать это через API Knex.

...