5

Laravelでクーポンサイトを作ろうとしています。各商人は独自の取引/クーポンを持っています。特定のページでマーチャントの取引/クーポンを印刷できました.

これが私のクエリです

$deals = DB::table('deals')
    -> join ('merchants', 'deals.merchant_id', '=', 'merchants.merchant_id')
    -> where ('merchant_url_text', $merchant_url_text)
    -> get();

ここまでは順調ですね。

ここから複雑になり始めます。

各ディールには、さらに 2 つのピースが関連付けられています。取引に関連付けられたクリック数と投票。

クリック数は、Web サイトでの各クリックを記録する clicks というテーブルにあります。クリック レコードには、関連付けられたクリック ID があります。そのため、各取引のクリック数を取得する必要があります。

2枚目は投票です。取引に関する投票はdeal_votesテーブルに保存されます。deal_votesテーブルにはdeal_id, vote(1または0)があります

ビューに情報を表示できるように、クリック数と取引票を組み合わせて同じクエリで返すにはどうすればよいですか?

4

1 に答える 1

7

マーチャント、取引、クーポン、およびクリック用にモデルと関係を設定していますか? ドキュメントがここにある関係でEloquentモデルを使用する場合、これは簡単です: https://laravel.com/docs/5.2/eloquent-relationships

これは次のようになります。

$merchant = Merchant::where('merchant_url_text', $merchant_url_text)
  ->with('deals','deals.votes','deals.clicks')
  ->first();

このwith()関数は、ネストされたすべての情報、つまりクエリjoinを 1 つのクエリに追加します。

あなたの見解では:

@foreach($merchant->deals as $deal)

   Deal: {{$deal->name}}

   Clicks: {{count($deal->clicks)}}

   Votes: {{$deal->votes->sum('vote')}}

@endforeach
于 2016-03-10T00:01:51.707 に答える