Laravel只有在值发生变化时如何更新mysql中的值

时间:2016-12-09 06:52:16

标签: php mysql laravel laravel-5.3

我是Laravel的新手。我试图做的就是如下:

我的表单中有一些字段,如 TITLE,DESCRIPTION

TITLE 字段在数据库中是唯一的。

这是我为更新价值所做的工作。

$product              = Product::find($id); 
$product->title       = $request->title;
$product->description = $request->description;
$product->save();

但是这会产生错误(该值已经存在),因为我的 TITLE 字段是唯一的。

我想要的只是在 TITLE 值更改时更新我的​​ TITLE ,否则更新相同的值但更新其他字段。谢谢

5 个答案:

答案 0 :(得分:4)

这样的东西?

$product = Product::find($id);

if ($product->title == $request->title) {
    $product->description = $request->description;
} else {
    $product->title = $request->title;
}

$product->save();

答案 1 :(得分:1)

您发布的代码确实(如果是间接的)您所说的内容。您的问题是另一个问题:您正在分配在其他地方使用的标题,从而违反了唯一性。

您必须确认尚未使用标题。

$duplicate = Product::where('title', '=', $request->title)->where('id', '!=', $id)->first();

此时目前还不清楚你想做什么

a)您是否要使用$id指示的重复记录而不是

b)这是一个错误吗?

c)是否应更新$id记录,单独保留标题?

你可以做任何这些事情; 不能做的是“仅在更改TITLE值时才更新我的TITLE”,因为已更改的值已在其他地方使用。

答案 2 :(得分:0)

我没有看到您的任何数据库结构或表单代码,只有您上面提到的小片段。

你可以这样做......

$checkTitle = Product::where('title', '=', $request->input('title')->first();

你也可以......

   $record = Product::find($id)

    if($request->input('title') === $record->title){
     // Record with the $id has the same title as you are posting in the request.
    }else{
         // Title for $id lets say id number 3, Is not the same as the form request you are sending so now Perform insert
      }


   if(count($checkTitle) >= 1){
      // Means the title exists and do what ever you want...
     //  Perform update
    }else{
      // Perform insert
     }

对不起,简短而甜蜜,离开去办公室,并认为现在发布可能会有所帮助。如果我在错误的轨道上并且在可能的地方帮助我,请告诉我。

答案 3 :(得分:0)

您可以使用if语句检查天气列值是否与原始值相同?

$currentProduct         = Product::find($id);
//Check and update if title not same
if($currentProduct->title == $request->title){
    $currentProduct->description   = $request->description;   
}
//Update title and description...
else {
    $currentProduct->title         = $request->title;
    $currentProduct->description   = $request->description;
} 

$currentProduct->save();

答案 4 :(得分:0)

你应该看一下Laravel中的wasChanged()函数。