#php #laravel #laravel-5 #eloquent #lumen
#php #laravel #laravel-5 #красноречивый #lumen
Вопрос:
Я хочу усечь свою пользовательскую таблицу перед заполнением.мне нравится это :
DatabaseSeeder.php :
<?php
use IlluminateDatabaseSeeder;
use IlluminateSupportFacadesDB;
class DatabaseSeeder extends Seeder
{
public function run()
{
AppUser::truncate();
factory(AppUser::class,1)->create();
}
}
Затем запустите php artisan db:seed
и получите ошибку:
In Connection.php line 664:
SQLSTATE[42000]: Syntax error or access violation: 1701 Cannot truncate a table referenced in a foreign key constra
int (`mr_musicer`.`dislikes`, CONSTRAINT `dislikes_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `mr_musicer`
.`users` (`id`)) (SQL: truncate `users`)
In Connection.php line 458:
SQLSTATE[42000]: Syntax error or access violation: 1701 Cannot truncate a table referenced in a foreign key constra
int (`mr_musicer`.`dislikes`, CONSTRAINT `dislikes_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `mr_musicer`
.`users` (`id`))
Теперь я хочу объяснить, почему я не могу усечь свою пользовательскую таблицу!
Ответ №1:
Существует проблема с внешним ключом, и table пытается напомнить вам об этом. Если вы все равно хотите усечь таблицу.
Schema::disableForeignKeyConstraints();
// ... Some Truncate Query
Schema::enableForeignKeyConstraints();
Не забудьте использовать:
use IlluminateSupportFacadesSchema;
Ответ №2:
Импорт DB
:
use IlluminateSupportFacadesDB;
А затем используйте этот фрагмент кода для усечения таблицы:
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
DB::table('posts')->truncate();
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
Ответ №3:
Самый простой способ усечь данные перед заполнением, когда у вас есть внешние ключи в таблице
Просто добавьте эту единственную строку в начале вашего метода запуска.
Schema::disableForeignKeyConstraints();
DB::truncate('posts'); or Post::truncate();
Schema::enableForeignKeyConstraints();
Комментарии:
1. Я думаю, что это ошибка, сначала вы должны использовать disableForeignKeyConstraints, а после ваших операций вызвать enableForeignKeyConstraints.
Ответ №4:
У вас есть ссылки на ваших пользователей в какой-то другой таблице. Вы должны добавить ->onDelete('cascade')
в столбец таблицы «Не нравится», который ссылается на идентификатор пользователя, или сначала удалить все «не нравится» вручную.
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
Комментарии:
1. я использовал
cascade
во всех таблицах, подобных этой :$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');