我有一个典型的模型关系。我的模型QR
,hasMany
评分,模型Rating
,belongsTo Qr
。
现在我想通过这样的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);
}
这是我的两个模型
Rating.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');
}
}
我实际上想要输出Qr-Code的ratings
计数。我知道可以这样做:
{{Rating::where('qr_id', $qr->id)->count()}}
但是我想在foreach
循环
{{ $Qr->rating->count() }}
如果这在某种程度上是可能的。
如果我只输出first()
的{{1}},那么我得到关系
的var_dump($ qrs-&GT; ratings-&GT;指定者())
但我不知道如何获得计数与Qr
循环相结合的评分数。任何帮助都会非常感激。
答案 0 :(得分: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-&gt; rating-&gt; count()这将是Collection方法。
答案 1 :(得分: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);
}
在这种情况下,您需要获取QR
个模型的集合,因为Unit
和Rating
与Qr
相关,那么您可以使用with
和get()
获取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