Миграция Laravel 4 не может добавить внешний ключ

Я пытаюсь добавить новую таблицу в проект laravel 4x, в котором есть ссылка внешнего ключа на первичный ключ в существующей таблице, в которой уже есть данные.

Вот мой файл миграции для добавления новой таблицы

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCustomResponsesTable extends Migration {

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('custom_responses', function (Blueprint $table) {
        $table->engine = 'InnoDB';
        $table->increments('id');
        $table->integer('hotel_id')->unsigned();
        $table->dateTime('created')->nullable();
        $table->dateTime('last_changed')->nullable();
        $table->string('response_type')->nullable();
        $table->mediumText('custom_response')->nullable();
    });

    Schema::table('custom_responses', function($table) {
        $table->foreign('hotel_id')->references('id')->on('properties');
    });

}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::drop('custom_responses');
}
}

Однако я также пробовал иметь такой файл миграции

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCustomResponsesTable extends Migration {

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('custom_responses', function (Blueprint $table) {
        $table->increments('id');
        $table->dateTime('created')->nullable();
        $table->dateTime('last_changed')->nullable();
        $table->string('response_type')->nullable();
        $table->mediumText('custom_response')->nullable();
        $table->integer('hotel_id')->unsigned();            
        $table->foreign('hotel_id')->references('id')->on('properties');
    });

}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::drop('custom_responses');
}
}

Когда я смотрю на существующую таблицу свойств, я вижу

Миграция Laravel 4 не может добавить внешний ключ

Но когда я пытаюсь запустить миграцию, я получаю

[Illuminate\Database\QueryException]                                                                                                                                                                                   
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `custom_responses` add constraint custom_responses_hotel_id_foreign foreign key (`hotel_id`) references `properties` (`id`))  

[PDOException]                                                          
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint

При сканировании аналогичных вопросов по SO, а также поиске ошибки в Google типичными причинами являются несоответствие типов данных или новая таблица MyISAM, когда только InnoDB поддерживает внешние ключи. Из всего, что я могу видеть, создается новая таблица InnoDB и типы данных совпадают.

Может ли кто-нибудь указать, что мне не хватает?

properties использует двигатель InnoDB?

Jonas Staudenmeir 27.06.2018 03:25
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
1
34
0

Другие вопросы по теме