laravel 5.2 中的嵌套 foreach 循环

Nested foreach loop in laravel 5.2

我有 3 table

1 个广告商

2 个广告

广告商可以有多个广告

3 个实例

广告可以有多个日期 - 日期是实例中的列 table

 $input = Input::get('fullname'); // fullname is the id of adverstiser
 // input is the advertiser id
   $adverts = DB::table('adverts')->where('a_id',$input)->get();
return view('adverts.index', compact( 'adverts'));

此查询将提供与广告商相关的所有广告数据。

很好。

在我的 adverts.index

 @foreach($adverts as $advert)
 <div class="caption">
     <ul>           
          <li><i class="fa fa-picture-o"></i> {{$advert->height}}x{{$advert->height}}</li>
          <li><i class="fa fa-file"></i> {{$advert->finfo}}</li>
          <li><i class="fa fa-eye"></i> Last seen:</li>
          <li><i class="fa fa-link"></i> {{$advert->domain}}</li>
          <li><i class="fa fa-link"></i> <a href="{{$advert->src}}" target="_blank">Visit full ad</a></li>              
      </ul>

  </div>
  @endforeach

我想从实例中获取上次查看日期 table。

SELECT MAX(date) AS "Last seen date" FROM instances WHERE ad_id =1

ad_id 是来自广告的主键 id table

我想将此查询的值传递给他们与上面相同的视图 adverts.index

循环是否必须在视图中完成?

或者我缺少的其他内容。

我会先看看你是否能得到每个 advert 至少有一个对应 instance 的最大日期。这样的事情应该可以解决问题:

$instances = DB::table('instances')
    ->select(DB::raw('*, MAX(date) as last_seen_date'))
    ->groupBy('ad_id')
    ->get();

如果你能先让它工作,那么你可以将它与你的 advertiseradverts 表结合起来以匹配特定的广告商并获得每个广告的剩余信息。您还可以执行 leftJoin 以确保您抓取所有 adverts,即使是没有任何匹配项的 instances

我也强烈建议您 define models,这样可以更轻松地在整个应用程序中创建可重用的查询片段 ("scopes")。