2013-02-14 7 views
23

Eloquentモデルで複数のフィールドを更新するにはどうすればよいですか?のは、私はこのようにそれを得たとしましょう:Laravel 4:Eloquentモデルで複数のフィールドを更新するにはどうすればよいですか?

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

そして私はすべてのこれらのモデルパラメータを持っている:

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

私はちょうど行うことはできません。

$user->update($new_user_data); 

、適切な方法は何?私はforeachではないと願っています。

ただし、次のように動作します。これは道のりですか?

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

最後に問題(それは不格好であることに加えて)オブジェクトコンテキストからそれを使用する場合、更新されたフィールドが$this変数に表示されないということです。

+0

はい、私はいくつかの列を更新し、 '更新()'関数と思い、これを試してみてくださいモデルを直接更新する場合にのみ機能します。それ以外の場合は、 'fill()'と 'save()'を使う必要があります。 – Pathros

答えて

55

あなたが探している方法はfill()次のとおりです。

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

実は、あなたが$user->fill($new_user_data)->save();を行うことができますが、私は別の文を読み取り、デバッグが少し楽を見つけます。

+0

新しいデータでupdate()やsave()をしていないのは残念ですが、これはうまくいきます。また、Ardentのパッケージを確認してください(検証やユニークな更新ではもっとうまくなります)。 – Tom

+5

誰でもこのエラーが発生しましたか? - 未定義のメソッドを呼び出します。\ Database \ Query \ Builder :: fill() – Bik

+0

Laravel 5. Works on Muchas gracias。 – racl101

3

私は、このような

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

あるいは短い

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

として、短いコードを使用することをお勧めする必要があり、私は最後の文は、デバッグが容易で、よりよいに見えると信じています。
警告:テーブルに 'rok'という名前のユーザーが多数含まれていると、これらの両方のステートメントはそれらのすべてのレジスタを一度に更新します。常にidフィールドの値でレジスタを更新する必要があります。あなたはこのを探している

9

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

は参照してください:http://laravel.com/docs/4.2/eloquent#insert-update-delete

+0

このリンクは質問に答えるかもしれませんが、答えの本質的な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になることがあります。 – abarisone

+0

@クマラマリンガム - ニース、ありがとうございます。 – Sambhav

+0

@Sambhav - Welcome –

0

// 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) 
); 
関連する問題