删除laravel中包含短划线的条目

时间:2016-01-30 17:39:14

标签: sql postgresql laravel eloquent laravel-5.2

我正在写一个“运行一次,扔掉”的laravel任务,假设在表上执行select并删除名称中包含短划线的任何条目。

A-R00001
B-R00001
C-R00001
UUA-F4

以上是一些条目的例子。

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

我想知道这是否是正确的做法。它运行在postgres数据库上,而不是那个,这很重要。

我见过的其他答案使用疯狂的正则表达式,我认为在这种情况下我不需要...

思想吗

2 个答案:

答案 0 :(得分:1)

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

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

而不是:

Model::where('name', 'like %-%')->delete();

当然问题是,如果你需要为你删除的每一行运行任何额外的任务。如果是这样,您应首先获取要删除的行并为其执行额外任务

修改

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

您需要运行:

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

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

为每一行运行delete事件,以便它们可以运行。

答案 1 :(得分:-2)

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

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

不需要循环或PHP