Sql 删除laravel中带有破折号的条目

Sql 删除laravel中带有破折号的条目,sql,postgresql,laravel,eloquent,laravel-5.2,Sql,Postgresql,Laravel,Eloquent,Laravel 5.2,我正在编写一个“运行一次,扔掉”的laravel任务,该任务假定对表进行选择,并删除名称中包含破折号的任何条目 A-R00001 B-R00001 C-R00001 UUA-F4 以上是一些条目的示例 我知道我可以这样做:Model::where('name','like%-%')->delete() 我想知道这是否是正确的方法。它运行在postgres数据库上,这并不重要 我看到的其他答案使用了疯狂的正则表达式,我认为在这种情况下我不需要它 想法?是的,如果要删除行,这可能是正确的方法,但应

我正在编写一个“运行一次,扔掉”的laravel任务,该任务假定对表进行选择,并删除名称中包含破折号的任何条目

A-R00001
B-R00001
C-R00001
UUA-F4
以上是一些条目的示例

我知道我可以这样做:Model::where('name','like%-%')->delete()

我想知道这是否是正确的方法。它运行在postgres数据库上,这并不重要

我看到的其他答案使用了疯狂的正则表达式,我认为在这种情况下我不需要它


想法?是的,如果要删除行,这可能是正确的方法,但应使用:

Model::where('name', 'LIKE', '%-%')->delete();
而不是:

Model::where('name', 'like %-%')->delete();
当然,问题是,如果您需要为删除的每一行运行任何额外任务。如果是这样,您应该首先获取要删除的行,并为它们运行额外的任务

编辑

如果要使用Laravel事件执行额外任务,则不能简单地删除所有行

您需要运行:

$models = Model::where('name', 'LIKE', '%-%')->get();

foreach ($models as $model) {
   $model->delete();
}

为每一行运行delete事件,这样就可以运行它们。

您能不只是执行简单的SQL吗?非常常见的数据库管理任务

DELETE FROM table WHERE field LIKE '%-%' ;

无需循环或PHP

在PHP级别执行此操作会带来好处。Laravel的模型可能启用了软删除,因此
delete()
实际上可能不会删除该行,而是将其标记为已删除。模型也可能有删除事件来处理其他清理/通知任务。当然有,但正如波斯特所说,这是一个一次性任务,听起来像是一个数据维护任务。除非设置了软删除,否则对于一次性任务,sql方式会更好。这些额外的任务应该由Laravel的雄辩事件来处理。您能解释一下
Model::where('name','LIKE','%-%')->delete()之间的区别吗
Model::where('name','like%-%')->delete()