在laravel 5.2中嵌套的foreach循环

时间:2016-03-16 12:34:18

标签: sql foreach nested eloquent laravel-5.2

我有3张桌子

1广告客户

2个广告

  • ID

广告客户可以有多个广告

enter image description here

3个实例

  • ID
  • ad_id
  • 日期

enter image description here

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

 $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

我想从实例表中获取最后一次看到的日期。

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

ad_id是广告表

中的主键ID

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

循环必须在视图中完成吗?

或者我想念的其他东西。

1 个答案:

答案 0 :(得分:1)

我首先会看到您是否可以获得至少有一个advert的每个instance的最长日期。这样的事情可以解决问题:

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

如果您可以先使用此功能,则可以将其与advertiseradverts表格结合使用,以匹配特定广告客户,并获取每个广告客户的剩余信息广告。您还可以执行leftJoin以确保抓取所有adverts,即使是那些没有匹配instances的{​​{1}}。

我还强烈建议您define models,这样可以更轻松地在整个应用程序中创建可重复使用的查询片段(“范围”)。