chunk (지정된 숫자);"입니다. 이 메서드는 각 사용자 데이터를 업데이트한 다음 데이터를 쿼리할 때 많은 양의 데이터가 획득되지 않도록 각 사용자의 데이터를 관리하므로 시스템에 대한 부담을 줄일 수 있습니다."/> chunk (지정된 숫자);"입니다. 이 메서드는 각 사용자 데이터를 업데이트한 다음 데이터를 쿼리할 때 많은 양의 데이터가 획득되지 않도록 각 사용자의 데이터를 관리하므로 시스템에 대한 부담을 줄일 수 있습니다.">
laravel에서 Chunk() 메서드는 컬렉션을 지정된 크기의 여러 개의 작은 컬렉션으로 분할하는 데 사용됩니다. 구문은 "$specified collection->chunk(지정된 숫자);"입니다. 이 메서드는 다양한 사용자 데이터 확인을 수행합니다. 업데이트 후 각 사용자의 데이터를 확인하여 데이터를 쿼리할 때 많은 양의 데이터를 얻지 않도록 하여 시스템에 대한 부담을 줄일 수 있습니다.
이 기사의 운영 환경: Windows 10 시스템, Laravel 버전 6, Dell G3 컴퓨터.
chunk()
chunk 메서드를 사용하면 컬렉션을 주어진 크기의 여러 개의 작은 컬렉션으로 나눌 수 있습니다. 컬렉션을 그리드에 표시하는 데 매우 유용합니다.
$prices = collect([18, 23, 65, 36, 97, 43, 81]); $prices = $prices->chunk(3); $prices->toArray();
위 코드는 효과를 생성합니다.
[ 0 => [ 0 => 18, 1 => 23, 2 => 65 ], 1 => [ 3 => 36, 4 => 97, 5 => 43 ], 2 => [ 6 => 81 ] ]
일반 용도
필요한 경우: 데이터베이스의 모든 데이터를 쿼리하고 일련의 업데이트를 수행합니다.
간단하고 조잡한 방법은 foreach를 사용하여 쿼리된 모든 데이터를 조작한 다음 저장하는 것입니다. 데이터베이스에 넣습니다.
$users = User::all(); foreach ($users as $user) { $some_value = ($user->some_field > 0) ? 1 : 0; $user->update(['some_other_field' => $some_value]); }
데이터가 매우 크면 시스템 메모리가 부족해질 수 있으며 이 방법은 확실히 서투릅니다.
Laravel은 이에 대한 간단한 솔루션을 제공합니다.
Laravel의 청크 메소드는 컬렉션을 지정된 크기의 여러 개의 작은 컬렉션으로 분할할 수 있습니다.
User::chunk(100, function ($users) { foreach ($users as $user) { $some_value = ($user->some_field > 0) ? 1 : 0; $user->update(['some_other_field' => $some_value]); } });
위 코드 실행 원리는 다음과 같습니다.
청크를 실행하면 이 청크가 100개를 알아냅니다. 사용자 데이터, 각 사용자 데이터 업데이트
그런 다음 100개의 사용자 데이터를 확인한 다음 업데이트 작업을 수행하는 등의 작업을 수행합니다.
즉, 데이터를 쿼리할 때 데이터베이스에서 많은 양의 데이터를 가져오지 않고 전체 테이블 대신 매번 100개의 데이터를 쿼리한다는 의미입니다.
이렇게 하면 시스템에 가해지는 압력이 줄어듭니다.
2. 참고할 사항
이 글의 초점은 다음과 같습니다.
하지만 필터 결과는 이렇게 실행할 수 없습니다.
User::where('approved', 0)->chunk(100, function ($users) { foreach ($users as $user) { $user->update(['approved' => 1]); } });
코드 실행 측면에서 이 문은 오류를 일으키지 않습니다
하지만 여기서는 문제는 승인됨=0으로 사용자를 필터링하고 승인됨=1
으로 데이터베이스 작업을 수행한 다음 다음 100개의 데이터 조각을 청크하려고 한다는 것입니다. 이때 데이터가 변경되어 한 페이지의 데이터를 놓칠 수 있습니다.
즉, 항목의 절반만 처리하고 절반은 남겨두게 된다는 의미입니다.
해결책:
Laravel 5.2 이후에는 ChunkById 메소드를 사용할 수 있습니다.
Laravel 5.2 이전에는 다음 코드를 참고할 수 있습니다
while(User::where('approved', 0)->count() > 0) { User::where('approved', 0)->chunk(100, function ($users) { foreach ($users as $user) { $user->update(['approved' => 1]); } }); }
[관련 권장 사항: laravel 비디오 튜토리얼]
위 내용은 Laravel의 청크 방법을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!