如何在 Laravel 模型更新后 return 更新数据?
How to return an updated data after updating in Laravel Model?
我有一个模型 Driver
,它有以下列:name
、branch
、status_id
、etc.
。更新实际上很好,我的问题是我怎样才能 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();
我有一个模型 Driver
,它有以下列:name
、branch
、status_id
、etc.
。更新实际上很好,我的问题是我怎样才能 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();