Я пытаюсь настроить свои таблицы в своей базе данных MySQL, и в настоящее время я создаю файлы миграции, используя Laravel 5.8. Когда я запускаю новую миграцию с
php artisan migrate
все миграции проходят гладко, и мой внешний ключ правильно добавляется в мою таблицу
Однако, когда я хочу обновить свою базу данных с помощью
php artisan migrate:refresh
я столкнулся с этой ошибкой
Illuminate\Database\QueryException : SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (SQL: drop table if exists
services)
Что я пробовал до сих пор:
Разделение моих внешних ключей в разных файлах миграции, чтобы они шли после моих таблиц, в которых нет внешних ключей.
Файловая архитектура в коде Visual Studio
добавление ->onDelete('каскад') для каждого внешнего ключа в моих функциях up() (код ниже)
Мой файл миграции Услуги
class CreateServicesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('services', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->text('description');
$table->integer('price');
$table->boolean('multiple_times');
$table->boolean('location');
$table->integer('animal_type_id')->unsigned();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('services');
}
}
Мой внешний ключ Тип животных
class ForeignKeyAnimalTypeServices extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('services', function($table){
$table->foreign('animal_type_id')->references('id')->on('animal_types')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('services', function(Blueprint $table){
$table->dropForeign(['animal_type_id']);
});
}
}
Моя модель Оказание услуг
class Service extends Model
{
protected $table = 'services';
protected $fillable = [
'name', 'description', 'price', 'multiple_times', 'location'
];
public function animalType()
{
return $this->belongsTo('App\AnimalType');
}
}
Хотя мои миграции созданы, я не могу обновить свои миграции, если мне нужно (или заполнить мою таблицу). Я хочу иметь возможность обновлять свои файлы, не получая этой ошибки. Я все еще довольно новичок в программировании, мои извинения, если отсутствует информация.






В миграции Class ForeignKeyAnimalTypeServices
Пытаться:
public function down()
{
Schema::disableForeignKeyConstraints();
Schema::table('services', function(Blueprint $table){
$table->dropForeign(['animal_type_id']);
});
Schema::dropIfExists('services');
Schema::enableForeignKeyConstraints();
}
Вы не можете удалить внешний ключ, я был вынужден удалить всю базу данных и воссоздать ее, хотя это может вам помочь:
ALTER TABLE table drop FOREIGN KEY transaction_client_id_foreign;