2016-04-27 17 views
7

()update()メソッドの違いは何ですか?laravelに更新を保存します

更新クエリの場合はsave()メソッドを使用しましたが、ほとんどの場合更新として機能し、挿入クエリ関数として機能することはほとんどありません。私はそれらの違いを正確に教えてください。

答えて

17

これらのメソッドを使用すると、データをデータベースに保存できます。お使いのモデルがすでにデータベースに存在する場合も

$flight = new Flight; 

$flight->name = $request->name; 

$flight->save(); // it will INSERT a new record 

それはUPDATEのように振る舞うことができ、:あなたが現在お使いのデータベーステーブルに提示されていない新しいモデルを作成INSERTとして

save()方法perfroms 。だから、実際に実行し、それを、モデルを取得し、いくつかのプロパティを変更し、その後save()できデシベルのUDPATE:だからあなたは

App\Flight::where('active', 1) 
      ->where('destination', 'San Diego') 
      ->update(['delayed' => 1]); // this will also update the record 

$flight = App\Flight::find(1); 

$flight->name = 'New Flight Name'; 

$flight->save(); //this will UPDATE the record with id=1 

update()方法は、あなたがより便利な方法であなたのモデルを更新することができます検索されたモデルを任意の変数に割り当てるべきではありません。更新されたプロパティは引数として渡されます。

例と詳細はLaravel's docsです。

4

@ginopaneが差異について語ったことは何も言われていません。query builder resultで更新メソッドを使用すると、laravelは$fillableまたは$guardのモデルの配列を無視します。あなたが更新するための引数としてInput::all()を使用したい場合、これは特に重要です:あなたは、データベース内App\Flight::where('active', 1)->update(Input::all());すべてのものを使用している場合ので、この場合には、あなたが$fillableに入れた場合でも

Post::where('id', $id)->update(Input::all()); 

を更新されます。だからEloquent instanceにはsaveupdateのメソッドを使用し、クエリービルダー1では使用しないでください。

// User model 
protected $fillable = ['email', 'name']; 


// controller 
public function update($id) 
{ 
    $user = User::findOrFail($id); 

    // validate the input here, use Request to do the job or whatever you like 

    $user->update(Input::all()); 

    return view('some_view')->with('notice', 'user updated'); 
} 

を、関係なく、ここに渡されるFORM、唯一nameで何とemail:次のコードは、ユーザーがあなたのdatabseテーブルに挿入したり、更新したくないフィールドを提出した場合でも罰金になります更新されます。

この完全な@ginopaneの回答

関連する問題