2014-04-25 34 views
0

我有一个典型的模型关系。我有型号QR,其中hasMany评级,和一个模型Rating,其中belongsTo QrLaravel对象关系在foreach循环中不起作用

现在我想输出Ratings,这属于一个qr模型,通过foreach循环是这样的:

  <table> 
       <tr> 
        <th>ID</th> 
        <th>UnitID</th> 
        <th># of Ratings</th> 
       </tr> 

       @foreach($qrs as $qr->ratings) 

       <tr> 
        <td>{{$qr->id}}</td> 
        <td>{{$qr->unit_id}}</td> 
        <td>{{$qr->ratings->count()}}</td> 
       </tr> 

       @endforeach 
      </table> 

这是我的控制器:

public function index() 
{ 
    // 
    $unit = Unit::all()->first(); 
    $qrs = Qr::all()->first(); 
    return View::make('index') 
     ->with('unit', $unit) 
     ->with('qrs', $qrs); 
} 

这里是我的两个模型

评级.php:

class Rating extends \Eloquent { 
    protected $guarded = []; 

    public function qr(){ 
     return $this->belongsTo('Qr'); 
    } 
} 

Qr.php:

class Qr extends \Eloquent { 
    protected $guarded = []; 

    public function unit(){ 
     return $this->belongsTo('Unit'); 
    } 

    public function ratings(){ 
     return $this->hasMany('Rating'); 
    } 
} 

其实我是想输出的ratings计数,QR码了。我知道这是可以做到的它在某种程度上是这样的:

{{Rating::where('qr_id', $qr->id)->count()}} 

但我想这样做在某种程度上是这样的foreach循环

{{ $Qr->rating->count() }} 

如果这是某种可能。

我得到的关系,如果我只是输出的Qrfirst()然后 的var_dump($ qrs-> ratings->指定者())

但我不知道怎么弄的计数额定值与foreach循环组合在一起。任何帮助将深表感谢。

回答

2

几件事错在这里:

// view: 
@foreach($qrs as $qr->rating) 
// should be: 
@foreach($qrs as $qr) 

// controller: 
$unit = Unit::all()->first(); 
$qrs = Qr::all()->first(); 
// this way you get all Units then fetch first Unit from the collection, 
// the same with Qrs, so change it to: 
$unit = Unit::all(); // do you need it at all? 
$qrs = Qr::with('ratings')->get(); 

这将解决这个问题,并在foreach循环中,你将能够访问$ QR-> ratings->计数(),它会收集方法。

+0

谢谢。将在几个小时内尝试...现在我的方式,无法测试它。但肯定地感谢你的贡献。 – LoveAndHappiness

1

起初,你用这个:

@foreach($qrs as $qr->ratings) 

你需要把它改成这样(如在回答中已经说过):

@foreach($qrs as $qr) 

然后在您的index方法,你用这个:

public function index() 
{ 
    $unit = Unit::all()->first(); 
    $qrs = Qr::all()->first(); 
    return View::make('index')->with('unit', $unit)->with('qrs', $qrs); 
} 

在这种情况下,你需要获得的集合0模式和自UnitRating涉及Qr那么你可以使用withget()得到的QR机型像这样的集合:

public function index() 
{ 
    $qrs = Qr::with(array('unit', 'ratings'))->get(); 
    return View::make('index')->with('qrs', $qrs); 
} 

然后你就可以循环的Qr车型在view像这个:

@foreach($qrs as $qr) 
    <tr> 
     <td>{{ $qr->id }}</td> 
     <td>{{ $qr->unit_id }}</td> 
     <td>{{ $qr->ratings->count() }}</td> 
    </tr> 
@endforeach