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

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

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


当前回答

与Travis vignon的回答类似,我需要雄辩模型的数据,如果条件正确,我需要删除或更新模型。我最终得到了我的查询返回的字段的最小值和最大值(如果另一个字段添加到表中,将满足我的选择标准)以及原始的选择标准,以便通过一个原始SQL查询更新字段(而不是对集合中的每个对象进行一个有力的查询)。

我知道使用原始SQL违反了laravel美丽的代码哲学,但它很难忍受可能有数百个查询代替一个查询。

其他回答

与Travis vignon的回答类似,我需要雄辩模型的数据,如果条件正确,我需要删除或更新模型。我最终得到了我的查询返回的字段的最小值和最大值(如果另一个字段添加到表中,将满足我的选择标准)以及原始的选择标准,以便通过一个原始SQL查询更新字段(而不是对集合中的每个对象进行一个有力的查询)。

我知道使用原始SQL违反了laravel美丽的代码哲学,但它很难忍受可能有数百个查询代替一个查询。

MyModel:: truncate ();

在准将队伍中:

PHP工匠修补匠

then

职位:截断();

我想为那些通过谷歌进入这个线程的人添加另一个选项。我需要完成这一点,但希望保留截断()重置的自动递增值。我也不想使用DB::任何东西,因为我想直接对模型对象进行操作。所以,我选择了这个:

Model::whereNotNull('id')->delete();

显然,列必须实际存在,但在标准的、开箱即用的Eloquent模型中,id列是存在的,并且永远不会为空。我不知道这是否是最好的选择,但它符合我的目的。

你可以使用Model::truncate()如果你禁用foreign_key_checks(我假设你使用MySQL)。

DB::statement("SET foreign_key_checks=0");
Model::truncate();
DB::statement("SET foreign_key_checks=1");

我在种子文件中看到过这两种方法。

// Uncomment the below to wipe the table clean before populating

DB::table('table_name')->truncate();

//or

DB::table('table_name')->delete();

即使你不能使用第一个,如果你想设置外键。

不能截断外键约束中引用的表

所以用第二个可能是个好主意。