chunk (지정된 숫자);"입니다. 이 메서드는 각 사용자 데이터를 업데이트한 다음 데이터를 쿼리할 때 많은 양의 데이터가 획득되지 않도록 각 사용자의 데이터를 관리하므로 시스템에 대한 부담을 줄일 수 있습니다."/> chunk (지정된 숫자);"입니다. 이 메서드는 각 사용자 데이터를 업데이트한 다음 데이터를 쿼리할 때 많은 양의 데이터가 획득되지 않도록 각 사용자의 데이터를 관리하므로 시스템에 대한 부담을 줄일 수 있습니다.">

>PHP 프레임워크 >Laravel >Laravel의 청크 방법을 사용하는 방법

Laravel의 청크 방법을 사용하는 방법

WBOY
WBOY원래의
2022-06-06 15:12:555485검색

laravel에서 Chunk() 메서드는 컬렉션을 지정된 크기의 여러 개의 작은 컬렉션으로 분할하는 데 사용됩니다. 구문은 "$specified collection->chunk(지정된 숫자);"입니다. 이 메서드는 다양한 사용자 데이터 확인을 수행합니다. 업데이트 후 각 사용자의 데이터를 확인하여 데이터를 쿼리할 때 많은 양의 데이터를 얻지 않도록 하여 시스템에 대한 부담을 줄일 수 있습니다.

Laravel의 청크 방법을 사용하는 방법

이 기사의 운영 환경: Windows 10 시스템, Laravel 버전 6, Dell G3 컴퓨터.

laravel의 청크 메서드를 사용하는 방법

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.