我希望能够清空我的种子表,但是有些表会受到外键的限制,而且还有一些表启用了软删除。
为了解决无法基于软删除截断表的问题,我只是通过对每个模型使用“foreach Model::all() delete”来删除该模型。也许有更好的方法吗?但对于启用软删除的表,这并没有实际删除记录。在我想要删除记录时,如何跳过软删除?
我希望能够清空我的种子表,但是有些表会受到外键的限制,而且还有一些表启用了软删除。
为了解决无法基于软删除截断表的问题,我只是通过对每个模型使用“foreach Model::all() delete”来删除该模型。也许有更好的方法吗?但对于启用软删除的表,这并没有实际删除记录。在我想要删除记录时,如何跳过软删除?
forceDelete
方法。Model::where('condition')->where('may be other condition')->forceDelete();
$modelInstance = Model::find($id);
$modelInstance->forceDelete();
DatabaseSeeder.php
中设置一条语句以禁用外键检查和模型保护:class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
// Disable foreign key check for this connection before running seeders
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
$this->call(UserTableSeeder::class);
// Enable foreign check after seeding.
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
Model::reguard();
}
}
$model->forceDelete()
而不是$model->delete()
。这是我通常的做法:
在我的迁移文件中,
public function run() {
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
DB::table('users')->truncate();
// Create the table structure
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
}