被接受的答案在2014年可能是真的,我不确定。现在肯定是不正确的。
该方法针对模型类的实例调用。使用原始问题的代码:delete()
$teetime = Teetime::where('date', '=', $formattedDate)->firstOrFail();
// $teetime is a model instance
$teetime->delete();
该方法是模型类的静态方法。它接受一个或多个主键:destroy()
$teetime_ids = Teetime::where('date', '=', $formattedDate)->pluck('id');
// $teetime_ids is a collection of 1 or more primary keys
Teetime::destroy($teetime_ids);
从文档中:
删除模型
要删除模型,可以在模型实例上调用 delete 方法:
use App\Models\Flight;
$flight = Flight::find(1);
$flight->delete();
按主键删除现有模型
在上面的示例中,我们在调用方法之前从数据库中检索模型。但是,如果您知道模型的主键,则可以删除该模型,而无需通过调用该方法显式检索它。除了接受单个主键之外,该方法还将接受多个主键、一组主键或一组主键:delete
destroy
destroy
Flight::destroy(1);
Flight::destroy(1, 2, 3);
Flight::destroy([1, 2, 3]);
Flight::destroy(collect([1, 2, 3]));
还有一个查询生成器方法,允许您直接从数据库表中删除记录。使用此方法有一些重要的警告,重要的是要了解 Eloquent 实现自己的查询生成器类,就像它实现自己的集合类一样。delete()
当针对 Eloquent 查询生成器调用时,将保留某些行为,例如对软删除的支持。但是,雄辩事件不会被触发,因为永远不会创建模型。deleting
deleted
delete()
也可以针对基查询生成器类调用,该类根本不了解 Eloquent。
比较生成的查询,假设导入了 trait:Teetime
SoftDeletes
Teetime::where('date', '=', $formattedDate)->delete();
// UPDATE teetimes SET deleted_at = NOW(), updated_at = NOW() WHERE `date` = ?
DB::table('teetimes')->where('date', '=', $formattedDate)->delete();
// DELETE FROM teetimes WHERE `date` = ?