2016-01-16 92 views
2

我有一個Post模型和Like模型。加載所有帖子,並檢查帖子是否喜歡laravel

當我去用戶頁面時,我可以看到他喜歡的所有帖子。現在,如果已登錄的用戶訪問用戶頁面時已經有用戶發佈帖子,我想指出一個小圖標。

這是我的選擇用戶的喜歡的職位(不登錄的用戶,但業主的個人資料):

$likesPost = Post::with('user')->join('likes', function ($join) use ($user) { 
    $join->on('likes.likeable_id', '=', 'id')->where('likes.user_id', '=', $user->id)->where('likes.likeable_type','=', Post::class); 
})->get(); 

現在我也想檢查驗證的用戶已經喜歡這個職位還是不以及這個查詢。我嘗試了很多東西,但我不知道我該如何解決這個問題。我正在使用多態關係。

回答

2

首先,我會改變你的初始查詢一點點。我會得到通過這樣用戶喜歡的職位(假設Postlikes關係):

$profileLikedPosts = Post::whereHas('likes', function($query) use ($user) { 
     return $query->where('user_id', $user->id); 
    }) 
    ->get(); 

接下來,你可以得到的當前登錄的用戶是這樣的喜歡的帖子:

// The "whereIn" just limits the results to those posts already retrieved 
// for the profile user. Not required, but gives a little performance boost 
// if this collection doesn't need the non-profile-liked posts. 

$authUser = Auth::user(); 
$authLikedPosts = Post::whereHas('likes', function($query) use ($authUser) { 
     return $query->where('user_id', $authUser->id); 
    }) 
    ->whereIn('id', $profileLikedPosts->lists('id')) 
    ->get(); 

現在,在您的刀片模板,你通過爲配置文件的用戶($profileLikedPosts)的喜歡的帖子循環,您可以使用收藏方法來檢查後也被登錄的用戶喜歡:

@foreach ($profileLikedPosts as $post) 
    // ... 
    @if ($authLikedPosts->contains('id', $post->id)) 
     // this post is liked by both; show your icon 
    @endif 
    // ... 
@endforeach 
+0

'$ user-> posts()'這隻會收集用戶創建的帖子。對?我想在所有帖子中查看它。 – user1012181

+0

@ user1012181是的,這是正確的。重新閱讀你的問題,這是有道理的。所以,你可以把'$ user-> posts() - >'改成'Post ::'。 (同樣的'$ authUser-> posts() - >') – patricus

+0

謝謝。它有幫助。但是'$ authLikedPosts-> has($ post-> id)'應該是 '$ authLikedPosts-> contains('id',$ post-> id)' – user1012181

相關問題