Если вы работаете с Laravel 8 и столкнулись с ошибкой «errno: 150 Foreign Key Constraint is Incorrectly Formed», не паникуйте! Эта ошибка возникает, когда в вашей базе данных возникает проблема с ограничением внешнего ключа. В этой статье мы рассмотрим несколько способов исправить эту ошибку и вернуть ваше приложение Laravel в нужное русло.
Метод 1: проверьте имена таблиц и столбцов
Одной из распространенных причин ошибки «errno: 150 Foreign Key Constraint is Incorrectly Formed» являются неправильные имена таблиц или столбцов. Убедитесь, что имена ваших таблиц и столбцов в объявлении внешнего ключа соответствуют фактическим именам в базе данных. Laravel следует правилам именования, поэтому убедитесь, что вы используете правильный регистр и написание.
Пример:
Schema::table('users', function (Blueprint $table) {
$table->foreignId('role_id')->constrained('roles');
});
Метод 2: проверка типов данных
Другая возможная причина этой ошибки — несоответствие типов данных между столбцами ограничения внешнего ключа. Убедитесь, что типы данных столбцов, на которые ссылаются, и столбцов внешнего ключа одинаковы.
Пример:
Schema::table('orders', function (Blueprint $table) {
$table->foreignId('product_id')->constrained();
});
Метод 3: проверьте порядок миграции
Если у вас есть несколько файлов миграции, убедитесь, что файл миграции для таблицы, содержащей ограничение внешнего ключа, выполняется после файла миграции для указанной таблицы. Laravel выполняет файлы миграции в том порядке, в котором они были созданы, поэтому перед созданием ограничения внешнего ключа убедитесь, что указанная таблица существует.
Метод 4: использовать тип данных «целое число без знака»
По умолчанию Laravel предполагает, что столбец внешнего ключа представляет собой целое число со знаком. Если указанный столбец представляет собой целое число без знака, вам необходимо явно указать его в объявлении внешнего ключа.
Пример:
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
Метод 5: проверьте параметры сортировки и набор символов
Убедитесь, что параметры сортировки и набор символов таблиц базы данных одинаковы. Несовпадение параметров сортировки или набора символов может привести к ошибке «ошибка: 150 ограничение внешнего ключа неверно сформировано». Вы можете установить параметры сортировки и набор символов в файле миграции.
Пример:
Schema::create('users', function (Blueprint $table) {
$table->charset = 'utf8';
$table->collation = 'utf8_unicode_ci';
});
Обнаружение ошибки «errno: 150 Foreign Key Constraint is Incorrectly Formed» в Laravel 8 может расстроить, но с помощью методов, упомянутых выше, вы можете устранить неполадку и решить проблему. Не забудьте дважды проверить имена таблиц и столбцов, проверить типы данных, порядок миграции, при необходимости использовать беззнаковый целочисленный тип данных и обеспечить согласованность параметров сортировки и набора символов. Выполнив эти шаги, вы сможете исправить ошибку и продолжить разработку приложения Laravel.