我的猜测是使用以下语法:

MyModel::all()->delete();

但这并没有起作用。我相信这是超级简单的,但我已经搜索了关于这个主题的文档,但找不到它!


当前回答

Laravel 5.2+解决方案。

Model::getQuery()->delete();

只需获取表名的底层构建器并做任何事情。 没有比这更整洁的了。

Laravel 5.6解决方案

\App\Model::query()->delete();

其他回答

有一种间接的方式:

myModel:where('anyColumnName', 'like', '%%')->delete();

例子:

User:where('id', 'like' '%%')->delete();

Laravel查询生成器信息:https://laravel.com/docs/5.4/queries

truncate的问题是它意味着立即提交, 因此,如果在事务中使用它,风险是您发现表为空。 最好的解决方案是使用删除

MyModel::query()->delete();

Laravel 5.2+解决方案。

Model::getQuery()->delete();

只需获取表名的底层构建器并做任何事情。 没有比这更整洁的了。

Laravel 5.6解决方案

\App\Model::query()->delete();

我不能使用Model::truncate(),因为它会出错:

SQLSTATE[42000]:语法错误或访问违规:1701不能截断外键约束中引用的表

不幸的是Model::delete()不起作用(至少在Laravel 5.0中):

非静态方法Illuminate\Database\Eloquent\Model::delete()不应该被静态调用,假设$this来自不兼容的上下文中

但这确实有效:

(new Model)->newQuery()->delete()

这将会软删除所有行,如果你设置了软删除的话。要完全删除所有行,包括软删除的行,您可以更改为:

(new Model)->newQueryWithoutScopes()->forceDelete()

在我的情况下,laravel 4.2删除所有行,但不截断表

DB:表(your_table) - > delete ();