Laravel에서 청크 세트 처리
수천 개의 Eloquent 결과를 처리해야 하는 경우 chunk
명령을 사용할 수 있습니다. chunk
메소드는 Eloquent 모델의 "청크"를 가져와서 처리를 위해 주어진 클로저에 채웁니다. chunk
방법을 사용하면 대규모 데이터 세트를 처리할 때 메모리 소비를 효과적으로 줄일 수 있습니다. chunk
命令。chunk
方法会获取一个“组块”的 Eloquent 模型,并将其填充到给定闭包进行处理。使用 chunk
方法能够在处理大量数据集合时能够有效减少内存消耗:
Flight::chunk(200, function ($flights) { foreach ($flights as $flight) { // } });
$all_ark=Arkvolume::chunk(50000, function ($flights) { foreach ($flights as $flight) { $GLOBALS['something'][] = $flight['id']; } }); var_dump($GLOBALS['something'] );exit;
这段代码是执行一个100条的数据进行更新,当执行完成后继续后面的另一百条数据……
也就是说他每次操作的是一个数据块而不是整个数据库。
需要注意的是:当使用带筛选的条件的chunk时,如果是自更新,那么你会漏掉一些数据,接着看代码:
User::where('approved', 0)->chunk(100, function ($users) { foreach ($users as $user) { $user->update(['approved' => 1]); } });
如果要运行上面的代码,并不会有报错,但是where
条件是筛选approved
为0
的user
然后将approved
的值跟新为1
。
在这个过程中,档第一数据库的数据被修改后,下一个数据块的数据将是在被修改后的数据中选出来的,这个时候数据变了,而page也加了1。所以执行结束后,只对数据中一半的数据进行了更新操作。
如果没有明白的话,我们来看一下chunk的底层实现。还以上面的代码为例,假如一共有400条数据,数据被按照100条进行分块处理。
page = 1: 最开始的时候page为1,选取1-100条数据进行处理;
page = 2: 这时候前一百数据的approved
public function chunk($count, callable $callback) { $results = $this->forPage($page = 1, $count)->get(); while (count($results) > 0) { // On each chunk result set, we will pass them to the callback and then let the // developer take care of everything within the callback, which allows us to // keep the memory low for spinning through large result sets for working. if (call_user_func($callback, $results) === false) { return false; } $page++; $results = $this->forPage($page, $count)->get(); } return true; }
🎜rrreee🎜 이 코드는 실행이 완료되면 100개 항목의 데이터 업데이트를 실행합니다. 다른 코드를 계속 진행합니다. 수백 개의 데이터...🎜즉, 전체 데이터베이스가 아닌 매번 하나의 데이터 블록을 운영한다는 것입니다. 🎜🎜필터링 조건이 있는 청크를 사용할 때 자체 업데이트되는 경우 일부 데이터가 누락될 수 있다는 점에 유의해야 합니다. 그런 다음 코드를 살펴보세요. 🎜🎜🎜🎜rrreee🎜위 코드를 실행하려면 오류가 있지만
where
조건은 승인
이 0
인 사용자
를 필터링한 다음 approved
설정 > 값이 1
로 업데이트됩니다. 🎜이 과정에서 첫 번째 데이터베이스의 데이터가 수정된 후 수정된 데이터 중에서 다음 데이터 블록의 데이터가 선택되며, 이때 데이터가 변경되고 페이지도 1 증가됩니다. 따라서 실행 후에는 데이터의 절반만 업데이트되었습니다. 🎜🎜이해가 되지 않는다면, 청크의 기본 구현을 살펴보겠습니다. 위의 코드를 예로 들면, 전체 데이터가 400개라면 데이터는 100개 단위로 블록으로 나누어집니다. 🎜page = 1: 처음에는 페이지가 1이고, 1~100개의 데이터가 처리 대상으로 선택됩니다. 🎜page = 2: 이때 첫 번째의 승인
값입니다. 100개 데이터는 모두 1이고, 다음 필터링 시에는 101번째 항목부터 데이터가 시작되며, 이때 페이지=2인 경우 처리된 데이터는 200~300개 이전의 데이터가 되며 이후에도 동일하게 유지됩니다. 저것. 🎜🎜🎜🎜rreee위 내용은 Laravel에서 청크 세트 처리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Laravel 이메일 전송이 실패 할 때 반환 코드를 얻는 방법. Laravel을 사용하여 응용 프로그램을 개발할 때 종종 확인 코드를 보내야하는 상황이 발생합니다. 그리고 실제로 ...

laravel 일정 작업 실행 비 응답 문제 해결 Laravel의 일정 작업 일정을 사용할 때 많은 개발자 가이 문제에 직면합니다 : 스케줄 : 실행 ...

Laravel의 이메일을 처리하지 않는 방법은 LaRavel을 사용하는 것입니다.

DCAT를 사용할 때 DCATADMIN (LARAVEL-ADMIN)에서 데이터를 추가하려면 사용자 정의의 테이블 기능을 구현하는 방법 ...

Laravel - 덤프 서버 - Laravel 덤프 서버는 Laravel 5.7 버전과 함께 제공됩니다. 이전 버전에는 덤프 서버가 포함되어 있지 않습니다. 덤프 서버는 laravel/laravel 작곡가 파일의 개발 종속성이 됩니다.

Laravel 프레임 워크 및 Laravel 프레임 워크 및 Redis를 사용할 때 Redis 연결을 공유하는 데 영향을 줄 수 있습니다. 개발자는 문제가 발생할 수 있습니다. 구성을 통해 ...

Laravel 다중 테넌트 확장 패키지 패키지 패키지 패키지 패키지 Stancl/Tenancy, ...

Laravel - 액션 URL - Laravel 5.7에는 "호출 가능한 액션 URL"이라는 새로운 기능이 도입되었습니다. 이 기능은 액션 메소드에서 문자열을 허용하는 Laravel 5.6의 기능과 유사합니다. Laravel 5.7에 도입된 새로운 구문의 주요 목적은
