我是Laravel的新手。我试图做的就是如下:
我的表单中有一些字段,如 TITLE,DESCRIPTION 。
TITLE 字段在数据库中是唯一的。
这是我为更新价值所做的工作。
$product = Product::find($id);
$product->title = $request->title;
$product->description = $request->description;
$product->save();
但是这会产生错误(该值已经存在),因为我的 TITLE 字段是唯一的。
我想要的只是在 TITLE 值更改时更新我的 TITLE ,否则更新相同的值但更新其他字段。谢谢
答案 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()函数。