我试图弄清楚如何正确地编写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等效的内容。
答案 0 :(得分:0)
您正在模型上调用update()
方法。如果更新成功,它将返回1。无需进行任何更改,成功更新始终为1。
如果只想在发生更改时保存到数据库,则可以改用save()
方法,该方法检查是否存在更改,并且仅在数据不同时才写入数据库。 。通过设置模型使其具有工作表中的所有新数据,您已经创建了用于执行此操作的代码,因此最后一个简单的save()
(检查其是否保存)将完成您的工作想。
但是,您当前的代码正在做很多的额外工作。您正在将所有变量分配给模型,然后根据对模型的数据分配进行更新。您不必在update方法中再次进行所有分配。设置字段后,您可以立即保存,而不必重新分配所有变量。所以:
$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
}
希望这会有所帮助