2017-07-06 2 views
0

コントローラで非常に多くの行を取得し、それをビューにディスパッチする方法を知りたいと思います。私の現在のコードは以下のように見えます。laravel 5で大きなテーブルを選択する

これはコントローラです。

$users = \App\Models\User::select ('id','first_name','last_name','created_at') 
      ->where('friend_id', '=', 0) 
      ->orderBy('created_at')->get(); 

return view('layouts.users.friends', compact('users')); 

これは図です。

@if (!empty($users)) 
        @foreach($users as $user) 
         <tr> 
          <?php $count++ ?> 
          <td> 
           {!! $user->id !!} 
          </td> 
          <td>{!! $user->first_name .' ' .$user->last_name !!}</td> 
          <td> {!! $user->created_at->format("d-m-y") !!} </td> 
         </tr> 
        @endforeach 
       @endif 

今私は、テーブルに40,000行を持っている、とするとき、メモリoutofビューのエラー・コード500を、取得しよう。私はすべての行を取得する必要があります。何をすべきかアドバイスしてください。ここに。私はlaravel 5チャンクについて聞いたことがあります。それを誰に表示するかは分かりません。助けてください。

+0

ページネーションを試しますか?たとえば、1ページあたり10行または100行しか得られませんか? –

+0

私はデータを表示した後にExcelファイルを作成しなければならないので、ページングは​​できません。ビューに表示されます。 excelプラグインは改ページをサポートしていません – Muhabutti

+0

'php.ini'の 'memory_limit'をチェックしましたか? –

答えて

0

データを表示するだけであれば、paginationを使用できます。ページ番号hereの公式文書を見ることができます。

複雑な計算や演算が必要な場合は、ループ最適化の方法が必要です。

0

ここに可能であり、いくつかの事、私は個人的にハックがチャンクに結果であり、その過程で、私がメインビューに渡し、次に必要なビュー部分を組み立てるようにしてくださいしようと1があります。

は、

ですから、このようなもの持つことができます。

$the_view = ""; 
\App\Models\User::select('id', 'first_name', 'last_name', 'created_at') 
     ->where('friend_id', '=', 0) 
     ->orderBy('created_at')->chunk(4000, function ($user_chunk) use (&$the_view) { 
      foreach ($user_chunk as $user) { 
       $the_view .= "<td >" . $user->id . "</td >" . 
        "<td >" . $user->first_name . " " . $user->last_name . "</td >" . 
        "<td > " . $user->created_at->format('d-m-y') . 
        " </td ></tr >"; 
      } 
}); 
return view('layouts.users.friends', compact('the_view')); 

次に、あなたのビューでは、単にHTMLとしてそれをエスケープ:

{ !! $the_view !! } 

を私はこれが動作するように証明されて言うことはありませんが、私はそれはshを考えますould。

その他推奨しない方法は、あなたのメモリ制限の例をいじっすることです:

ini_set('memory_limit', '256M'); 

PS:私はそのお勧めできません言ったように。チャンクを試してみて、あなたができることのアイデアを出してください。

関連する問題