首页 文章

列出资源时检查关系

提问于
浏览
1

有这3个表:

个用户

  • user_id

  • first_name

  • last_name

帖子

  • post_id

  • Headers

  • 身体

posts_users

  • post_id

  • user_id

post - user 关系表示用户正在关注帖子 .

列出帖子的最简单方法是:

$posts= Posts::all();

foreach ($posts as $post)
{
    var_dump($post->title);
}

但是当列出帖子时,我也想查询当前用户(比如user_id = 5)是否跟随每个帖子 .

所以对于每个帖子我都会 post_idtitle ,..., is_following [0 or 1] .

我可以使用简单的SQL来做到这一点,但这可以用Eloquent方式完成吗?

2 回答

  • 1

    也许尝试急切加载用户,然后为每个帖子,循环访问该帖子后面的用户寻找用户ID .

    $posts = Post::with('users')->get();
    
    foreach($posts as $post) {
        echo $post->title;
        foreach($post->users as $user) {
            if($user->id == $user_id) {
                echo 'User with id of '.$user_id.' is following this post.';
                break;
            }
        }
    }
    
  • 2

    假设您使用 hasMany('Post')User 模型上定义了 Post / User 关系,您可以使用contains()检查当前 Post 是否在用户的后续帖子中:

    $followed_posts = $current_user->posts();
    
    if ($followed_posts->contains($current_post->id))
    {
        // This Post is being followed by the User
        // .... Do something .... :)
    }
    

相关问题