如何在Laravel 5.4中基于用户ID排除某些行?

时间:2017-04-18 16:39:47

标签: mysql laravel eloquent laravel-5.4

我有3个表:postsvotesusers。我想排除那些已经被当前用户投票的帖子(Auth :: user() - > id)。我该怎么做?我试过这段代码:

 $user_id = Auth::user()->id;
        $posti = Post::with('user')
        ->whereDoesntHave("votes")
        ->whereBetween('posts.created_at', array(Carbon::now()->subHours(48), Carbon::now()))
        ->orderBy('posts.created_at', 'DESC')
        ->orderByVotes()
        ->take(20)
        ->get();

2 个答案:

答案 0 :(得分:2)

您可以使用投票关系和回调函数检查帖子是否没有来自登录用户的投票。要实现此目的,请使用以下代码:

$user_id = Auth::user()->id;
Post::with('votes')
    ->whereDoesntHave('votes', function ($query) use ($user_id) {
        $query->where('user_id', $user_id);
    })
    ->get();

答案 1 :(得分:0)

  

您还可以使用if条件中的关系来检查已登录的用户是否已经投票:

$user = Auth::user()->id;
@if($user->votes)

@else