我试图弄清楚如何在 eloquent 中正确编码 update() 函数,以根据表单中的用户输入返回 0 或 1。例如,如果我点击更新按钮而不进行任何更改,它会返回 1。它不应该返回 0 吗?
我尝试在 stackoverflow 中研究类似的解决方案,看看是否有人遇到与我面临的相同问题。但到目前为止还没有运气。我也尝试修改代码,但没有成功。
public function update(Request $request, $id)
{
$UCPost = UCPost::find($id);
$UCPost->gown_2019 = $request->input('Gown2019');
$UCPost->gown_2017_2018 = $request->input('Gown20172018');
$UCPost->gown_2016 = $request->input('Gown2016');
$UCPost->gown_2015 = $request->input('Gown2015');
$UCPost->Light_Blue = $request->input('LightBlue');
$UCPost->Seconds = $request->input('Seconds');
$UCPost->Velveteen = $request->input('Velveteen');
$UCPost->Velveteen_discolored = $request->input('Velveteen_discolored');
$UCPost->Rental = $request->input('Rental');
$UCPost->Rentals_Out = $request->input('Rentals_Out');
$UCPost->Rentals_Left = $request->input('Rentals_Left');
return $UCPost->where('id', $id)->update(
[
'gown_2019' => $UCPost->gown_2019,
'gown_2017_2018' => $UCPost->gown_2017_2018,
'gown_2016' => $UCPost->gown_2016,
'gown_2015' => $UCPost->gown_2015,
'Light_Blue' => $UCPost->Light_Blue,
'Seconds' => $UCPost->Seconds,
'Velveteen' => $UCPost->Velveteen,
'Velveteen_discolored' => $UCPost->Velveteen_discolored,
'Rental' => $UCPost->Rental ,
'Rentals_Out' => $UCPost->Rentals_Out,
'Rentals_Left' => $UCPost->Rentals_Left
]
);
}
上面的代码正如我之前提到的,无论对表单进行任何更改,它总是返回 1。如果用户没有进行任何更改或者他们不小心点击了更新按钮,我希望它返回 0。我正在尝试在 Eloquent 中找到 mysqli_affected_rows 的等效项。
最佳答案
您正在模型上调用 update()
方法。如果更新成功,将返回 1。是否进行任何更改并不重要,成功更新后始终为 1。
如果您只想在发生更改时保存到数据库,则可以使用 save()
方法,该方法会检查是否存在更改,并且仅写入数据库如果数据不同。您已经创建了代码来执行此操作,通过将模型设置为包含工作表中的所有新数据,因此最后有一个简单的 save()
(检查是否保存) ,会做你想做的事。
但是,您当前的代码正在执行大量额外工作。您将所有变量分配给模型,然后根据模型的数据分配进行更新。您不必在更新方法中再次执行所有分配。设置字段后,可以立即保存,无需重新分配所有变量。所以:
$UCPost->gown_2019 = $request->input('Gown2019');
// etc..
$UCPost->Rentals_Left = $request->input('Rentals_Left');
$UCPost->save();
将带您到达您想去的地方,并且仅在不同的情况下才会保存。
如果您可以控制表单,并且可以更改表单元素名称以匹配您的数据库,那么这可能会更容易。您可以在一行中完成所有这些操作:
$UCPost->update($request->all());
如果你想检查模型是否脏,只需调用 isDirty():
if($UCPost->isDirty()){
// changes have been made
}
最后,如果您想验证在任一方法(保存或更新)之后是否有任何更改:
if ($UCPost->wasChanged()) {
// changes have been made
}
希望这有帮助
关于php - Eloquent DB::Post->where()->update() 始终返回 1,无论进行任何更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56998708/