2017-03-14 7 views
1

私は2つのテーブルを持っています。Laravel 5.3ブレードforeachループ:2つの異なるデータベースの雄弁なクエリからのループでデータを表示

  1. ContentTypeを
  2. コンテンツ

たContentTypeは私に、コンテンツタイプのリストを返し、私はforeachのをページ上に表示されます。例えば救急車サービス、血液銀行、診療所などに表示されます。

同時に、別のテーブル(コンテンツ)から各タイプのコンテンツの総数を取得しています。

私は各タイプの内容の合計数を取得し、foreachでブレードに表示することに成功しました。 しかし、すべてのコンテンツタイプにコンテンツの数を表示したいのですが。 クリニック4 、この 救急流通サービス8、 血液銀行7のような私の制御方法であって

public function index() 
{ 
    if (Gate::allows('edit-content', auth()->user())) { 
// below line returns list of content type e.g Ambulance service    

$type = DB::table('contenttype')->distinct('label')->orderBy('label',  'asc')->paginate(10); 

//below line counts the number of each content type e.g. Ambulance service 10. 

$count = Content::selectRaw('type, count(*)total')->groupBy('type')->get(); 
return view('admin.content_listing', compact('type', 'count')); 
    } else { 
     abort(403, "Unauthorized"); 
    } 
} 

これは、ブレード・コードである:

@foreach ($count as $c) 
    <span class="label label-danger">{{ $c->total }} </span> 
@endforeach 

この赤色番号リストを出力する。enter image description here

出力:enter image description here もし私が2番目のループに上記のループを置くなら、もちろんそれは望んでいないネストされたループになります。

私は誰もが解決策を知っている場合親切にそれを共有

血液銀行1、 など、救急車8、 美容クリニック8を表示する必要があります! 私はさまざまな方法を試みましたが、成功しませんでした。

答えて

1

2つのクエリを作成し、その結果をビューで結合しようとするのではなく、1つのクエリで結合を実行しようとしましたか?

SELECT contenttype.*, count(content.id) FROM contenttype LEFT JOIN content ON contenttype.id = content.type GROUP BY contenttype.label ORDER BY contenttype.label ASC; 

Laravelのクエリビルダ機能を持つこのクエリを実装するために必要なコードはかなりよくdocumentationに記載されています:あなたの列名について一定の仮定を作成し、ページネーションを脇に残して、実際のSQLはと同類なものになるだろう。

関連する問題