【发布时间】:2016-09-25 02:50:12
【问题描述】:
对于我的播种机,我希望能够截断我的表,不幸的是,有一些被外键绑定,另外还有一些启用了软删除。
为了解决无法基于软删除截断表的问题,我只是说 foreach Model::all() 删除该模型。也许有更好的方法?但是对于具有软删除的表,它实际上并没有删除记录。当我真的想删除记录时,如何绕过软删除?
【问题讨论】:
标签: laravel
对于我的播种机,我希望能够截断我的表,不幸的是,有一些被外键绑定,另外还有一些启用了软删除。
为了解决无法基于软删除截断表的问题,我只是说 foreach Model::all() 删除该模型。也许有更好的方法?但是对于具有软删除的表,它实际上并没有删除记录。当我真的想删除记录时,如何绕过软删除?
【问题讨论】:
标签: laravel
你需要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;');
}
这基本上是忽略外键约束的强制删除表。
【讨论】: