我的猜测是使用以下语法:
MyModel::all()->delete();
但这并没有起作用。我相信这是超级简单的,但我已经搜索了关于这个主题的文档,但找不到它!
我的猜测是使用以下语法:
MyModel::all()->delete();
但这并没有起作用。我相信这是超级简单的,但我已经搜索了关于这个主题的文档,但找不到它!
当前回答
你也可以试试这条保留软删除的一行代码:
Model::whereRaw('1=1')->delete();
其他回答
MyModel::all()->delete()不起作用的原因是all()实际上触发了查询并返回了Eloquent对象的集合。
你可以使用截断方法,这适用于Laravel 4和5:
MyModel::truncate();
这将从表中删除所有行,而不记录单个行删除。
有一种间接的方式:
myModel:where('anyColumnName', 'like', '%%')->delete();
例子:
User:where('id', 'like' '%%')->delete();
Laravel查询生成器信息:https://laravel.com/docs/5.4/queries
在Laravel 3中完成此操作的最佳方法似乎是使用Fluent接口截断表,如下所示
DB::query("TRUNCATE TABLE mytable");
Laravel 5.2+解决方案。
Model::getQuery()->delete();
只需获取表名的底层构建器并做任何事情。 没有比这更整洁的了。
Laravel 5.6解决方案
\App\Model::query()->delete();
我在种子文件中看到过这两种方法。
// Uncomment the below to wipe the table clean before populating
DB::table('table_name')->truncate();
//or
DB::table('table_name')->delete();
即使你不能使用第一个,如果你想设置外键。
不能截断外键约束中引用的表
所以用第二个可能是个好主意。