Мне нужно установить связь между таблицами 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();
});
'cedula' должно быть уникальным в таблице Citizen, чтобы обеспечить целостность при связывании с Nuclear_family.
Вы можете обновить свою миграцию следующим образом:
В миграции таблицы Citizen
Обновление $table->string('cedula')->unique();
При миграции таблицы нуклеарного семейства
Обновление $table->foreign('mainCedula')->references('cedula')->on('citizen')->onDelete('cascade');
После настройки файлов миграции, как указано выше, снова запустите команду миграции.
Это решило проблему, большое спасибо.