我的猜测是使用以下语法:
MyModel::all()->delete();
但这并没有起作用。我相信这是超级简单的,但我已经搜索了关于这个主题的文档,但找不到它!
我的猜测是使用以下语法:
MyModel::all()->delete();
但这并没有起作用。我相信这是超级简单的,但我已经搜索了关于这个主题的文档,但找不到它!
当前回答
你可以使用Model::truncate()如果你禁用foreign_key_checks(我假设你使用MySQL)。
DB::statement("SET foreign_key_checks=0");
Model::truncate();
DB::statement("SET foreign_key_checks=1");
其他回答
我不能使用Model::truncate(),因为它会出错:
SQLSTATE[42000]:语法错误或访问违规:1701不能截断外键约束中引用的表
不幸的是Model::delete()不起作用(至少在Laravel 5.0中):
非静态方法Illuminate\Database\Eloquent\Model::delete()不应该被静态调用,假设$this来自不兼容的上下文中
但这确实有效:
(new Model)->newQuery()->delete()
这将会软删除所有行,如果你设置了软删除的话。要完全删除所有行,包括软删除的行,您可以更改为:
(new Model)->newQueryWithoutScopes()->forceDelete()
你也可以试试这条保留软删除的一行代码:
Model::whereRaw('1=1')->delete();
我想为那些通过谷歌进入这个线程的人添加另一个选项。我需要完成这一点,但希望保留截断()重置的自动递增值。我也不想使用DB::任何东西,因为我想直接对模型对象进行操作。所以,我选择了这个:
Model::whereNotNull('id')->delete();
显然,列必须实际存在,但在标准的、开箱即用的Eloquent模型中,id列是存在的,并且永远不会为空。我不知道这是否是最好的选择,但它符合我的目的。
有一种间接的方式:
myModel:where('anyColumnName', 'like', '%%')->delete();
例子:
User:where('id', 'like' '%%')->delete();
Laravel查询生成器信息:https://laravel.com/docs/5.4/queries
在我的情况下,laravel 4.2删除所有行,但不截断表
DB:表(your_table) - > delete ();