2013-11-22 8 views
4

Я пытаюсь создать comments таблицу с внешним ключом к users таблицы со схемой строитель Laravel 4 в, например, так:SQL 1005 ошибка при запуске Laravel 4 миграции

Schema::create('comments', function(Blueprint $table) 
{ 
    $table->increments('id'); 
    $table->integer('user_id'); 
    $table->text('body'); 
    $table->timestamps(); 

    $table->foreign('user_id')->references('id')->on('users'); 
}); 

Но когда я бегу миграция, я получаю следующее сообщение об ошибке:

[Exception] 
SQLSTATE[HY000]: General error: 1005 Can't create table 'streamr.#sql-16fc_89' (errno: 150) 
(SQL: alter table `comments` add constraint comments_user_id_foreign foreign key (`user_id`) references `users` (`id`)) (Bindings: array()) 

насколько я могу судить, это происходит потому, что id столбец users таблицы int(10) и $table->integer('user_id') делает int(11), что приводит к сбою внешнего ключа из-за несовместимых типов столбцов. Однако, когда я пытаюсь установить длину целого столбца я создаю это не работает:

$table->integer('user_id', 10); 

Есть ли способ обойти это? Кажется странным, что схема строитель Laravel будет строить int(10) колонки для первичных ключей и не сделать их совместимыми с integer столбцами:/

Edit: Я также уверен, что таблицы InnoDB, и они.

ответ

3

$table->increments('id') Производит целое число без знака. Целые числа не совместимы с целыми целыми знаками при настройке внешнего ключа.

Попробуйте это:

$table->unsignedInteger('user_id')->nullable(); 
$table->foreign('user_id')->references('id')->on('users'); 

От Laravel Docs (http://laravel.com/docs/schema#foreign-keys):

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

+0

если вы используете '-> onDelete ('set null');' like '$ table-> foreign ('user_id') -> ссылки ('id') -> on ('users') -> onDelete ('set null'); ', вероятно, необходимо установить значение по умолчанию для столбца: $ table-> unsignedInteger ('user_id') -> nullable();' –

Смежные вопросы