2016-06-17 2 views
1

데이터베이스에 40k 개의 항목이 있으며 laravel에서 간단한 가져 오기를 사용하여 해당 항목을 호출하려고합니다.500 개의 오류를 일으키는 행이 너무 많습니까?

$domains = Domain::where("available", 1)->limit(1000)->get(); 
return view('domains') 
    ->with("domains", $domains); 

최대 1,000 행까지 작동합니다. 하지만 통화 제한을 설정하지 않으면 500 오류가 발생합니다. 나는 그 이유를 짐작할 수 없으며,이 문제를 피하는 방법을 발견 할 수있는 곳을 찾지 못하고, 아파치 로그에서 아무것도 찾을 수없는 것, 또는 저장소에있는 laravel의 자체 로그를 찾을 수 없습니다.

+1

을 확인하고 오류에 뭔가가 있어야합니다 오류보고가 활성화 된 경우 로그 http://stackoverflow.com/questions/845021/how-to-get-useful-error-messages-in-php –

+0

PHP 스크립트에 허용 된 메모리가 부족합니다. –

+4

PHP가 할당 한 메모리 풀을 다 써 버리고 싶습니다. 결과에 페이지 매김을해야합니다. – Machavity

답변

5

->chunk 명령을 사용하면이 문제를 피할 수 있습니다.

Domain::where('available', 1)->chunk(200, function($domain){ 
    //do whatever you would normally be doing with the rows you receive 
    // $domain stuff 
}); 

chunk 명령의 목적은 모델의 모든 X 반복 한 후 메모리를 확보하는 것입니다. 이 경우, 내가 200

(!) 참고을 표시했습니다 - 아파치 HTTP (500)를 제공하는 경우 청크 방법은 2 인자로 Closure을 사용하기 때문에, 당신에게 use($your_varaibles);

+0

감사합니다. 존재하지 않았다. 문제는 반환보기에서 $ domains 변수를 사용하고 싶습니다. -> with ("domains", $ domains); 여기서 솔루션의 범위 내에서 그 작업을 수행하는 방법을 잘 모르겠습니다. 반환보기를 청크의 범위로 이동 시키면이 경우 200 개의 항목 만 제공됩니다. 그래서 어떻게 든 범위 밖에서 반복적으로 전달해야합니까? 작은 편집 설명 –

+1

@DavidG 지연된 응답으로 인해 미안합니다. - 루프에서 미리보기로 평소와 같이 사용할 수있는 콜렉션으로 푸시 할 수 있습니다. 미리 콜렉션에 별명을 지정하십시오.'$ domains = collect ([]);', 그러면 루프의 내부에서 그것들을'$ domains-> push ($ domain);'에 놓습니다. 그런 다음'$ domains'를 반환하고 평소와 같이 볼 수 있습니다. – Ohgodwhy