(Laravel 11) errno: 150 «Ограничение внешнего ключа сформировано неправильно

Мне нужно установить связь между таблицами Citizen и Nuclear_Family, это предназначено для того, чтобы они могли заполнить форму информации о своей семье, которая будет связана с папкой гражданина, которая работает с их идентификационным номером, называемым «Cedula», идентификация храниться как строка в базе данных MySQL

Schema::create('nuclear_family', function (Blueprint $table) {
            $table->id();
            $table->integer('familyNumber');
            $table->string('name');
            $table->string('middlename');
            $table->string('surname');
            $table->string('secondsurname');
            $table->integer('identification');
            $table->integer('bornyear');
            $table->integer('age');
            $table->string('kinship');
            $table->string('occupation');
            $table->string('workplace');
            $table->string('income');
            $table->string('ailments');
            $table->string('totalFamilyIncome');
            $table->string('familyHeadIncome');
            $table->string('totalIncome');
            $table->integer('familyId');
            $table->string('mainCedula');
            $table->foreign('mainCedula')->references('cedula')->on('citizen');
            $table->timestamps();
        });

Это миграция схемы для формы Nuclear_Family.

Schema::create('citizen', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('middlename');
            $table->string('surname');
            $table->string('secondsurname');
            $table->string('age');
            $table->string('phone');
            $table->string('cedula');
            $table->timestamps();
        });

и это миграция схемы для гражданина. Всякий раз, когда я пытаюсь выполнить миграцию, мне не удается добавить mainCedula в качестве внешнего ключа «cedula» в таблице гражданина, несмотря на то, что оба являются строками, это следующая ошибка при выполнении миграции с php ремесленник мигрирует

Я пробовал работать с ForeignId и ограниченными методами, как того требует документация, чтобы посмотреть, смогу ли я устранить ошибку, но это не сработало.

Schema::create('nuclear_family', function (Blueprint $table) {
            $table->id();
            $table->integer('familyNumber');
            $table->string('name');
            $table->string('middlename');
            $table->string('surname');
            $table->string('secondsurname');
            $table->integer('identification');
            $table->integer('bornyear');
            $table->integer('age');
            $table->string('kinship');
            $table->string('occupation');
            $table->string('workplace');
            $table->string('income');
            $table->string('ailments');
            $table->string('totalFamilyIncome');
            $table->string('familyHeadIncome');
            $table->string('totalIncome');
            $table->integer('familyId');
            $table->foreignId('mainCedula')->constrained(
                table: 'citizen', indexName: 'nufam_cedula');
            $table->timestamps();
        });
Schema::create('citizen', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('middlename');
            $table->string('surname');
            $table->string('secondsurname');
            $table->string('age');
            $table->string('phone');
            $table->foreignId('cedula');
            $table->timestamps();
        });
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

'cedula' должно быть уникальным в таблице Citizen, чтобы обеспечить целостность при связывании с Nuclear_family.

Вы можете обновить свою миграцию следующим образом:

В миграции таблицы Citizen Обновление $table->string('cedula')->unique();

При миграции таблицы нуклеарного семейства Обновление $table->foreign('mainCedula')->references('cedula')->on('citizen')->onDelete('cascade');

После настройки файлов миграции, как указано выше, снова запустите команду миграции.

Это решило проблему, большое спасибо.

Kuo 20.08.2024 22:13

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