我正在写一个“运行一次,扔掉”的laravel任务,假设在表上执行select并删除名称中包含短划线的任何条目。
A-R00001
B-R00001
C-R00001
UUA-F4
以上是一些条目的例子。
我知道我可以这样做:Model :: where('name','like% - %') - > delete();
我想知道这是否是正确的做法。它运行在postgres数据库上,而不是那个,这很重要。
我见过的其他答案使用疯狂的正则表达式,我认为在这种情况下我不需要...
思想吗
答案 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