列出资源时检查关系

时间:2013-12-03 10:14:56

标签: php orm laravel eloquent

有这3个表:

用户

  • USER_ID
  • 如first_name
  • 姓氏

帖子

  • POST_ID
  • 标题

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 个答案:

答案 0 :(得分:2)

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

$followed_posts = $current_user->posts();

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

答案 1 :(得分: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;
        }
    }
}