У меня установлено приложение Laravel, и я использую Sentry 2 для аутентификации пользователей. У меня есть модель под названием « Post
вместе со стандартным часовым столом User
. Я хотел бы, чтобы у пользователя было много сообщений, а почта для пользователя. Чтобы отразить это в моей схеме базы данных, мне нужно создать ограничение внешнего ключа между posts
и users
.
Миграция, которую я написал, следующая:
public function up() { Schema::table('posts', function(Blueprint $table) { $table->integer('user_id')->after('id')->nullable(); $table->foreign('user_id')->references('id')->on('users'); }); }
После запуска с php artisan migrate
, я получаю ошибку MySQL в командной строке:
[Осветите \ Database \ QueryException]
SQLSTATE [HY000]: Общая ошибка: 1005 Невозможно создать таблицу 'blog.dev. # Sql-3bb_2d' (errno: 150) (SQL: alter tableposts
add constraint posts_user_id_foreign external key (user_id
) ссылается наusers
(id
))
Сначала я думал, что эта ошибка возникла из-за того, что столбец первичного ключа у users
определен иначе, чем мой пользовательский столбец user_id
, однако оба они определены как int(10)
.
Из Google я узнал, что эта ошибка может быть вызвана различием двух определений столбцов, однако, похоже, это не так.
Внешний ключ уже должен быть в базе данных, поэтому я предлагаю сделать два шага. Также я предлагаю сделать столбец user_id
неподписанным:
public function up() { Schema::table('posts', function(Blueprint $table) { $table->integer('user_id')->after('id')->nullable()->unsigned(); }); Schema::table('posts', function(Blueprint $table) { $table->foreign('user_id')->references('id')->on('users'); }); }