2016-09-01 6 views
0

도움이 필요합니다. 행 ID를 사용하여 여러 행을 업데이트해야합니다.여러 레코드를 업데이트하는 Laravel

$sortable=$request->sortable; 
    foreach ($sortable as $key => $id) { 
     Category::where('id','=',$id)->update(['sort_order' => $key+1]); 
    } 

이 방법은 여러 번 업데이트되기 때문에 실현 불가능합니다. 하나의 업데이트에서만 동일한 작업을 수행하려고합니다. 정렬에

값은 다음 0 "2" 1 : "1" 2 : "4" 3 "3" 4 "5"문제는 그 사용이 사용

+0

당신은 한 쿼리에서 단일 열을 여러 번 업데이트 할 수 없습니다. –

답변

1

특정 ID에 고유 값인 'sort_order'를 지정하기 때문에 하나의 쿼리에서이 작업을 수행 할 수 없습니다. 주어진 ID를 갖는 모든 행이 동일한 'sort_order'값을 가져야 만 한 쿼리를 수행 할 수 있습니다. 그러나 트랜잭션을 사용하여 시작하면 쿼리를 향상시킬 수 있습니다. 다음과 같은 두 가지 이점이 있습니다.

  1. 테이블의 데이터는 일관성이 있습니다. 모두 업데이트 또는 없음.
  2. 테이블의 'sort_order'필드에서 인덱스를 사용하면 트랜잭션이 끝날 때 한 번 플러시됩니다. 솔루션을 보여줍니다

Laravel 코드는 다음과 같습니다 :

\DB::transaction(function() use ($sortable) { 
    foreach ($sortable as $key => $id) { 
     Category::where('id','=',$id)->update(['sort_order' => $key+1]); 
    } 
}); 
0

각 루프가 카테고리의 각 행을 업데이트하므로 느려질 수 있습니다. 대신에 당신이 할 수있는 일은 당신이 웅변적인 방법을 사용할 수 있다는 것입니다.

$ ids가 ID의 배열인지 확인하십시오.

관련 문제