2014-04-25 58 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