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

Delete entries that have a dash in them in laravel

我正在编写一个 "run once, throw away" laravel 任务,假设在 table 上执行 select 并删除名称中包含破折号的任何条目。

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();
}

到 运行 删除每一行的事件,以便它们可以是 运行。

能不能不做简单的SQL?非常常见的数据库管理任务...

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

不需要循环或 PHP