2013-02-14 2 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();을 할 수 있지만이 계산서를 읽고 디버깅하기가 좀 더 쉽게 찾을 수 있습니다. 같은

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

심지어 짧은 내가 짧은 코드를 사용하는 것이 좋습니다한다

+0

새 데이터로 update() 또는 save()를 사용하지 않은 것은 유감스러운 일입니다.하지만이 방법이 효과적입니다. 또한 Ardent 패키지를 살펴보아야합니다 (유효성 검사 및 고유 항목 업데이트를 사용하면 훨씬 편리합니다). – Tom

+5

누구나이 오류를 얻었습니까? - 정의되지 않은 메서드를 호출하십시오. \ Database \ Query \ Builder :: fill() – Bik

+0

Laravel 5에서 작동합니다. Muchas gracias. – racl101

3

$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

@Kumar Ramalingam - Nice, thank you :) – 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) 
); 
관련 문제