2016-04-27 11 views
7

Laravel'de save() ve update() yöntemi arasındaki fark nedir?Kaydetme vs laravelde

ben güncelleme sorgusu durumunda() kaydetme yöntemi kullanmış ancak birkaç vakada güncellenme gibi davranır ve birkaç durumda, insert sorgusu fonksiyonu olarak hareket ederler. Lütfen aralarındaki farkı tam olarak belirtin.

cevap

17

Bu yöntemler hem sen veritabanına verileri kaydetmek için izin verir. Modeliniz veritabanında zaten mevcut Ayrıca

$flight = new Flight; 

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

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

bir UPDATE gibi hareket edebilir,: Şu anda veritabanı tablosunda sunulan değil yeni bir model oluşturmak INSERT olarak

save() yöntem perfroms . Yani aslında performans, bunu, model olsun bazı özelliklerini değiştirmek ve sonra save() olabilir db en UDPATE: Yani

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 

Bir update() yöntem daha uygun şekilde modellerini güncellemek için izin verir Hatta herhangi bir değişkene ulaşan bir model atamamalı. Güncellenen özellikler bağımsız değişken olarak iletilir.

Örnekler ve Laravel's docs daha bilgi.

4

Orada söylenmemiş tek şey @ginopane fark hakkında söyledikleri içinde olduğunu ve bir query builder result güncelleme yöntemini kullanırsanız o zaman laravel Modelinizin $fillable veya $guard dizi görmezden olacağı bu. Bu güncellemek için bir argüman olarak Input::all() kullanmak istiyorsanız özellikle önemli: $fillable koymak bile

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

Yani bu durumda veritabanınızda App\Flight::where('active', 1)->update(Input::all()); herşey güncellenecektir kullanırsanız. Yani Eloquent instance üzerine save ve update yöntemleri kullanmak ve oluşturucu bir sorgu değil emin olun. Sadece name ve email olursa olsun, Şimdi

// 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'); 
} 

ne FORMU burada geçirilen: Kullanıcı Lütfen databse tabloda eklemek istemediğiniz alanları veya güncelleme gönderseniz dahi Aşağıdaki kod iyi olacak güncellenecek.

Umut bu eksiksiz @ginopane cevap