Я использую построитель схем Laravel 4.2 для создания некоторых таблиц, ссылающихся друг на друга, и у меня есть некоторые проблемы.Первичный ключ строителя схемы Laravel как внешний ключ
У меня есть упрощенная ERD. Обратите внимание, что только соответствующие столбцы показаны:
Обратите внимание, что я не могу изменять tblcurrencies
и tbldomains
таблицы в любом случае, так как я занимаюсь разработкой модуля для подключения к существующей системе.
Я пытаюсь добиться следующего:
- Таблица
extensions
содержит дополнительную информацию о строках вtbldomains
таблице - Таблица
prices
содержит информацию о ценах о домене в определенной валюте, с дополнительным (регистрация, обновление, передача) - Я хочу использовать внешние ключи, чтобы я мог выполнять каскадные удаления.
В настоящее время я использую следующий код, чтобы создать две таблицы:
Capsule::schema()->create('extensions', function ($table) {
$table->engine = 'InnoDB';
$table->integer('relid', 10);
// ...
$table->primary(['relid']);
$table->foreign('relid')->references('id')->on('tbldomains')->onDelete('cascade');
});
Capsule::schema()->create('prices', function ($table) {
$table->engine = 'InnoDB';
$table->integer('relid', 10);
$table->integer('currency', 10);
$table->enum('type', ['domainregister', 'domainrenew', 'domaintransfer']);
// ...
$table->primary(['relid', 'currency', 'type']);
$table->foreign('relid')->references('relid')->on('extensions')->onDelete('cascade');
$table->foreign('currency')->references('id')->on('tblcurrencies')->onDelete('cascade');
});
Сценарий создания результатов prices
таблицы в следующем запросе SQL:
create table `prices` (`relid` int unsigned null auto_increment primary key, `currency` int unsigned null auto_increment primary key, `type` enum('domainregister', 'domainrenew', 'domaintransfer') not null, ...) engine = InnoDB
Который в свою очередь, приводит к следующей ошибке:
SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key
Я также попытался установить первичные ключи как уникальные, полагая, что, возможно, Laravel автоматически устанавливает первичные целые ключи как автоматическое приращение.
Кроме того, я попытался установить колонки в unsigned
и index
, как это было предложено this и this ответ
Как остановить строитель схемы с установкой relid
и currency
полей в авто инкремент, так как они просто внешние ключи?