雄辩的DB :: Post-> where()-> update()始终返回1,无论进行任何更改

时间:2019-07-12 00:03:08

标签: php mysql laravel 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等效的内容。

1 个答案:

答案 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
}

希望这会有所帮助