Вы не должны делать двустороннюю связь между таблицами.Это обычно признак плохого дизайна базы данных.
В этом случае, я полагаю, у вас должно быть отношение «многие к одному», когда курс может иметь несколько файлов.
В этом случае таблица files
должна иметь внешний ключ, указывающий на courses
.
exports.up = async function (knex, Promise) {
await knex.schema.createTable('courses', function (table) {
table.increments('id'); // increments is automatically set to be primary key
});
await knex.schema.createTable('files', function (table) {
table.increments('id');
table.integer('course_id').unsigned().notNullable()
.references('id').inTable('courses');
});
}
Если вы хотите, чтобы у каждого курса был только один файл, вам нужно иметь внешний ключ, указывающий от courses
до files
.
exports.up = async function (knex, Promise) {
await knex.schema.createTable('files', function (table) {
table.increments('id');
});
await knex.schema.createTable('courses', function (table) {
table.increments('id');
table.integer('file_id').unsigned().notNullable()
.references('id').inTable('files');
});
}
Однако, если вы хотитечтобы сделать это, вам нужно сначала создать одну таблицу без внешнего ключа, а затем вторую таблицу, и после этого вы можете добавить внешний ключ, указывающий на вторую таблицу.
Это должно сделать более или менее
exports.up = async function (knex, Promise) {
await knex.schema.createTable('courses', function (table) {
table.increments('id');
});
await knex.schema.createTable('files', function (table) {
table.increments('id');
table.integer('course_id').unsigned().notNullable()
.references('id').inTable('courses');
});
await knex.schema.table('courses', function (table) {
table.integer('file_id').unsigned().notNullable()
.references('id').inTable('files');
});
}
Также есть другие ошибки в приведенном выше коде, например, вы пытаетесь установить первичный ключ таблицы course
для ссылки files
таблицы course_id
, которая указывает на первичный ключ таблицы courses
..
Отказ от ответственности: я даже не пытался запустить написанный код, но он должен дать основную идею.