SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `users` add constraint `users_image_id_foreign` foreign key (`image_id`) references `file` (`id`))
Таблица users
public function up()
{
Schema::create('users', function (Blueprint $table) {
...
$table->integer('image_id');
...
});
Schema::table('users', function($table) {
$table->foreign('image_id')
->references('id')->on('file');
});
}
Таблица file
public function up()
{
Schema::create('file', function (Blueprint $table) {
$table->increments('id');
...
});
}
Я неправильно прописал fk?
Изначально хотел связать таблицу users
и files
, чтобы присваивать пользователю картинку (аватар).
Распишу чуть подробнее:
Проблема в том, что вы создаете ссылку на таблицу которой нету, да вы можете поменять время создания (название файла) тех таблиц, что б они стояли выше, но думаю это не очень эстетично, у вас будут появляться все новые связки и вам все время делать migrate:refresh
?
Плюс в итоге можно запутаться что, когда, зачем делалось, поэтому логично делать так:
1) Создаете миграцию с таблицей на которое должно ссылаться поле, в вашем примере создаете таблице files: class CreateFilesTable() extends Migration{...}
2) Затем создаете еще одну миграцию с "говорящим" названием, например add_filed_file_to_users_table и в ней создаете ваше поле file_id и затем описываете ссылку
class AddFiledFileIdToUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->integer('file_id')->unsigned()->nullable();
$table->foreign('file_id')
->references('id')->on('files')
->onDelete('set null');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropForeign('users_file_id_foreign');
});
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('file_id');
});
}
}
Это облегчит в последствии несколько проблем, вы всегда сможете вспомнить как развивались события, ну и в случае чего легко откатиться назад.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Почему выдаёт ошибку Parse error: syntax error, unexpected 'if' (T_IF)?