如何在 Laravel 模型更新后 return 更新数据?

How to return an updated data after updating in Laravel Model?

我有一个模型 Driver,它有以下列:namebranchstatus_idetc.。更新实际上很好,我的问题是我怎样才能 return 更新一个?

到目前为止,这是我尝试过的方法,但它 return 是 boolean,这是由于 return 我的控制台出现错误:

The Response content must be a string or object implementing __toString(), "boolean" given.

public function updateStatus(Driver $driver)
{
    return $driver->update($this->validateStatus());
}

public function validateStatus()
{
    return $this->validate(request(), [
        'status_id' => 'required|min:1|max:3'
    ]);
}

我希望它应该 return 驱动程序的所有列。

我去过这个 但它没有帮助。有人知道怎么做吗?

return 作为 object 而不是 boolean type

public function updateStatus(Driver $driver)
{
   $driver->update($this->validateStatus());
   return $driver;// first way
   // return tap($driver)->update($this->validateStatus()); //second way
}

public function validateStatus()
{
    return $this->validate(request(), [
        'status_id' => 'required|min:1|max:3'
    ]);
}

您可以使用 tap() 助手,它会在更新后 return 更新对象,如下所示:

return tap($driver)->update($this->validateStatus());

更多信息请点击此处:Tap helper

我认为不需要任何模型助手

控制器中你可以这样做

$driver = Driver::find(1);
$driver->name = "expmale";
$driver->save();

return $driver;

或其他方式

$driver = Driver::find(1);
$driver->update([
      'name'=> "expmale"
      ]);

return $driver;

我知道这已经有了答案,但理想情况下,您不想使用更新方法。它只是一个模型辅助方法,并没有真正增加太多。在内部它执行我在下面包含的内容,除了它 returns save().

的结果

您想做这样的事情:

if ($driver->fill($this->validateStatus)->save()) {
    return $driver;
}

throw new \RuntimeException('Update failed, perhaps put something else here);

接受的答案(以及大多数其他答案)的问题是你 return 模型而没有检查它是否实际更新,所以你要 运行 当它没有更新实际数据库时,即使它报告它是,也会出现问题。

对我有用

   $notify = tap(Model::where('id',$params['id'])->select($fields))->update([
            'status' => 1
        ])->first();