如何在laravel大规模更新中使用突变子


How to use mutators in laravel mass update?

我目前正在通过以下操作更新数据库中的多行:

我在post中取一个数组并循环它,每个成员都是fieldname=>value的数组,我正在对每个成员进行更新。问题是,当我以这种方式更新时,我设置的突变器不会运行。是否有另一种有效的更新方法并且会调用突变子?

代码:

foreach ($post['row'] as $row) {
     Instances::where('id', $row['id'])->update($row);
  }

您可能会通过以下操作来使用您的mutator:

foreach ($post['row'] as $row) 
{
     $data = Instances::where('id', $row['id'])->first();
     foreach($row as $key => $value)
     {
        $data->$key = $value; // which is the same as $data->setAttribute($key, $value);
     }
     $data->save();
}

你就不能重写update方法吗?

class BaseModel extends Eloquent {
    public function update($array)
    {
        parent::update($this->trimAll($array));
    }
    public function trimAll($data)
    {
        /// trim them here
    }
}

你可以继续使用:

Instances::where('id', $row['id'])->update($row);