2013-02-14 20 views
23

Eloquent modelindeki birden çok alanı nasıl güncelleyebilirim?Laravel 4: Eloquent modelindeki birden çok alanı nasıl güncellersiniz?

$user = User::where("username", "=", "rok"); 

Ve sonra tüm bu modeli parametreleri vardır: en Böyle aldım diyelim

$new_user_data = array("email" => "[email protected]", "is_superuser" => 1, ...); 

Sadece yapamaz:

$user->update($new_user_data); 

uygun yolu nedir? Umarım foreach.

Aşağıdakiler işe yarar. Bu gitmek için bir yol mu?

User::where("id", "=", $user->id)->update($new_user_data); 

sonuncusu ile sorun (aksak olmanın yanı sıra) bir amacı, bağlamdan kullanırken, güncelleştirilmiş alanları $this değişken görünür olmayan olmasıdır.

+0

Evet, bence birkaç sütun, 'güncelleştirme güncellenmesi()' işlevi Sadece Modeli doğrudan güncellerken çalışır. Aksi takdirde, 'fill()' ve 'save()' tuşlarını kullanmanız gerekir. – Pathros

cevap

55

aradığınız yöntem fill() geçerli:

$user = User::where ("username","rok"); // note that this shortcut is available if the comparison is = 
$new_user_data = array(...); 
$user->fill($new_user_data); 
$user->save(); 

Aslında $user->fill($new_user_data)->save(); yapabilirdi ama ayrı beyanlara okumak ve ayıklamak için biraz daha kolay bulmaktadır. gibi

$new_user_data=array('a'=>'n','b'=>'m'); 
    $user=User::whereUsername('rok');//camelCase replaces "=" sign 
    $user->fill($new_user_data)->save(); 

Ya da kısa Ben daha kısa kodu kullanmayı önermek gerekir

+0

Yeni verilerle güncelleme() veya kaydetme() yapmadıkları utanç verici ... ama bu işe yarıyor. Ayrıca, Ardent paketine baktığınızdan emin olun (doğrulama ve güncelleme alışkanlıklarıyla işleri daha güzel hale getirir). – Tom

+5

Herkes bu hatayı aldırdı: - Tanımlanmamış yönteme yapılan çağrı Yanıyor \ Veritabanı \ Sorgu Oluşturucu :: dolgu() – Bik

+0

Laravel 5. Çalışmaları Muchas gracias. – racl101

3

,

$new_user_data=array('a'=>'n','b'=>'m'); 
    User::whereUsername('rok')->update($new_user_data);//camelCase replaces "=" sign 

Geçen deyimi ayıklama daha kolaydır ve daha hoş görünüyor inanıyoruz.
Uyarı: Tablonuzda 'rok' adında çok sayıda kullanıcı varsa, her iki deyim de tüm bu kayıtları bir kerede güncelleyecektir. Kayıtları her zaman id alanı değeriyle güncellemelisiniz.

9

Bu arıyoruz:

$user = User::where("username","rok") 
       ->update( 
         array( 
          "email" => "[email protected]", 
          "is_superuser" => 1, 
          // .. 
          ) 
         ); 

bakın: http://laravel.com/docs/4.2/eloquent#insert-update-delete

+0

Bu bağlantı soruyu yanıtlayabilirken, cevabın temel kısımlarını buraya dahil etmek ve referans için bağlantı sağlamak daha iyidir. Bağlantılı sayfa değişiklikleri – abarisone

+0

@Kumar Ramalingam - Nice ise, yalnızca bağlantıya verilen yanıtlar geçersiz hale gelebilir, teşekkürler :) – Sambhav

+0

@Sambhav - Karşılama –

0

bu deneyin,

// took required data out of the request 
$postData = request(
    [ 
     'firstName', 
     'lastName', 
     'address1', 
     'address2', 
     'address3', 
     'postcode', 
     'phone', 
     'imageURL', 
    ] 
); 
// persisted it to the database 
DB::table('users') 
    ->where('id', auth()->user()->id) 
);