2015-06-01 54 views
1

我想獲得總評論的用戶有..Laravel計數與在內部刀刃

控制器:

public function index() 
{ 
    $setting = Setting::findOrFail(1); 

    $comments = Comment::where('published', '=', '1')->get(); 

    $users = User::all(); 

    return view('page.index', compact('setting', 'comments', 'users')); 
} 

查看:

@foreach($comments as $comment) 

{{ count($users->where('user_id', '=', $comment->user_id)) }} 

@endforeach 

的問題是,它只返回0,我有2個評論那裏..即使使用用戶ID來代替「$ comment-> user_id」它不工作。仍然顯示0.

回答

5

$users是一個集合,而不是一個查詢。對待它:

@foreach ($comments as $comment) 

    {{ $users->where('user_id', $comment->user_id)->count() }} 

@endforeach 

收集的where方法確實not take an operator


從你的問題看來你的措辭實際上是希望它周圍的其他方法:

$comments = Comment::wherePublished(1)->get()->groupBy('user_id'); 

然後在您的視圖:

@foreach ($users as $user) 

    {{ $comments->has($user->id) ? count($comments[$user->id]) : 0 }} 

@endforeach 
+0

謝謝隊友,我已經嘗試過了,但是我在'where'中加了'=',這也給了我0 ..大聲笑再次感謝。 – TiagoF

1

我遲到回答你問題和Joseph已經向你展示了這個問題,但你也可以做不同的事情。您可以將意見通過Collection::groupBy,例如:

$comments = Comment::all()->groupBy('user_id'); 

然後在你的view你可以試試這個:

@foreach($comments as $user => $userComments) 
    // count($userComments) 
    // Or 
    @foreach($userComments as $comment) 
     // {{ $comment->title }} 
    @endforeach 
@endforeach 

在第一循環(@foreach($comments as $user => $userComments)),該$useruser_id,它的價值會是這個用戶在組中的所有評論(一個數組)。

+1

加1.方式更有效率。我只是想盡量接近OP的代碼。 –

+0

感謝隊友,是的,你做了正確的事情,因爲'OP'在錯誤的方向,但你讓他清楚,他學到了一些東西:-) –