我的猜测是使用以下语法:
MyModel::all()->delete();
但这并没有起作用。我相信这是超级简单的,但我已经搜索了关于这个主题的文档,但找不到它!
我的猜测是使用以下语法:
MyModel::all()->delete();
但这并没有起作用。我相信这是超级简单的,但我已经搜索了关于这个主题的文档,但找不到它!
当前回答
与Travis vignon的回答类似,我需要雄辩模型的数据,如果条件正确,我需要删除或更新模型。我最终得到了我的查询返回的字段的最小值和最大值(如果另一个字段添加到表中,将满足我的选择标准)以及原始的选择标准,以便通过一个原始SQL查询更新字段(而不是对集合中的每个对象进行一个有力的查询)。
我知道使用原始SQL违反了laravel美丽的代码哲学,但它很难忍受可能有数百个查询代替一个查询。
其他回答
MyModel::all()->delete()不起作用的原因是all()实际上触发了查询并返回了Eloquent对象的集合。
你可以使用截断方法,这适用于Laravel 4和5:
MyModel::truncate();
这将从表中删除所有行,而不记录单个行删除。
简单的解决方案:
Mymodel::query()->delete();
在Laravel 3中完成此操作的最佳方法似乎是使用Fluent接口截断表,如下所示
DB::query("TRUNCATE TABLE mytable");
Laravel 5.2+解决方案。
Model::getQuery()->delete();
只需获取表名的底层构建器并做任何事情。 没有比这更整洁的了。
Laravel 5.6解决方案
\App\Model::query()->delete();
truncate的问题是它意味着立即提交, 因此,如果在事务中使用它,风险是您发现表为空。 最好的解决方案是使用删除
MyModel::query()->delete();