2016-12-09 18 views
4

私はLaravelを新しくしました。私がしようとしているのは以下の通りです。Laravel値が変更された場合にのみmysqlの値を更新する方法

私のフォームには、のようなフィールドがいくつかあります。タイトルは、です。

タイトルフィールドはデータベース内で一意です。

これは私の値を更新するために行ったことです。

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

しかし、私のTITLEフィールドが一意であるとして、これは(その値が既に存在する)エラーになります。

私はTITLE値が変更された場合にのみ、私のTITLEを更新されたいすべてがそうでない場合は、同じ値を更新したが、他のフィールドを更新します。ありがとう

+0

http://stackoverflow.com/questions/28866500/laravel-eloquent-update-just-if-changes-have-been-madeこれはあなたを助けるかもしれません... –

答えて

4

これは何か?

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

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

$product->save(); 
+0

私は与えられた特定の行を更新したいid。私は上記の関数は、タイトルが一致する行を変更すると思います。それはso.Thanksです – nasor

+0

更新された答えを確認してください。あなたはDBから行を取得します。タイトルが変更されたかどうかを確認します。タイトルが変更された場合、タイトルのみが更新されます。そうでない場合は、説明のみが更新されます。あなたが探しているこの動作ですか? –

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 
    } 

、オフィスに行くために残して、それが役立つかもしれないと思いました今投稿する私が間違ったトラックに乗っていて、私ができるところで病気があれば教えてください。

1

あなたが投稿したコードは、あなたが望む通りに(間接的に)正確に行います。あなたの問題は別のものです:他の場所で使用されているタイトルを割り当てようとしています、それによって一意性を侵害します。

新しいタイトルがまだ使用されていないことを確認する必要があります。この時点

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

は、あなたがを何をしたいかは不明である:

a)に重複したレコード$idで示されているものの代わりにを使用しますか?

b)これはエラーですか?

c)$idレコードを更新する必要がありますか?タイトルだけを残してください。

あなたはこれらのことを行うことができます。あなたはできませんする場合は、変更された値は既に他の場所で使用されているので、 "タイトルの値が変更された場合のみ私のタイトルを更新する"です。

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(); 
0

LaravelのwasChanged()関数を見てください。

+0

このwasChanged関数に関するドキュメントや情報はありますか?私はどこにでも見てきました。私は何かを見つけることができません。 –

+0

ここに行く - https://laravel.com/api/5.5/Illuminate/Database/Eququent/Concerns/HasAttributes.html#method_isDirty –

+0

おかげで!あなたは素晴らしいです –

関連する問題