#sql #laravel #laravel-5 #migration #database-migration
#sql #ларавель #ларавель-5 #миграция #база данных-миграция #laravel #laravel-5
Вопрос:
2019_04_23_164151_create_contacts_table.php файл миграции
<?php
use IlluminateSupportFacadesSchema;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateDatabaseMigrationsMigration;
class CreateContactsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('contacts', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('first_name');
$table->string('last_name');
$table->string('surname');
$table->timestamps();
});
Schema::create('contacts_relations', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedInteger('phone_id')->nullable()->default(1);
$table->unsignedInteger('contact_id')->nullable()->default(1);
});
Schema::create('contact_phone', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('phone_number');
$table->unsignedInteger('contacts_relations_id')->nullable()->default(1);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('contacts');
}}
2019_04_24_183110_contacts_relations.php установщик внешнего ключа
<?php
use IlluminateSupportFacadesSchema;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateDatabaseMigrationsMigration;
class ContactsRelations extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('contacts_relations', function (Blueprint $table) {
$table->foreign('contact_id')->references('id')->on('contacts');
});
Schema::table('contact_phone', function (Blueprint $table) {
$table->foreign('contacts_relations_id')->references('id')->on('contacts_relations');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}
запустите php artisan migrate: fresh и получите
SQLSTATE [HY000]: Общая ошибка: 1215 Не удается добавить ограничение внешнего ключа (SQL: alter table contacts_relations
добавить ограничение contacts_relations_contact_id_foreign
ссылки contact_id
внешний ключ ( contacts
) id
(, ,) при каскадном удалении при каскадном обновлении),,
Ответ №1:
Вы должны убедиться, что все столбцы имеют фактически один и тот же тип. Например, в таблице contacts
столбец id
является большим целым числом без знака, поэтому, когда вы создаете contact_id
столбец в contacts_relations
вместо:
$table->unsignedInteger('phone_id')->nullable()->default(1);
это должно быть:
$table->unsignedBigInteger('phone_id')->nullable()->default(1);
Аналогичная вещь для contacts_relations_id
столбца
Комментарии:
1. Также, поскольку существует значение по умолчанию, удалите nullable $table-> unsignedBigInteger(‘phone_id’)-> default(1);
2. @Rachid Ну, значение по умолчанию может быть равно 1, но в некоторых случаях вы можете захотеть установить значение
null