Symfony 2为多个用户查找博客文章

时间:2012-09-13 15:46:49

标签: php symfony doctrine-orm

我有3张牌桌:useruser_followersblog_posts 用户可以关注其他用户,用户与blog_post的{​​{1}}相关。

我需要收到我所关注的人写的所有博文 我试过像:

user_id

我尝试了很多变化,但无法弄清楚。也许有人知道一种更好的方法来搜索多个对象而不仅仅是一个。

3 个答案:

答案 0 :(得分:0)

您可以在BlogRepository.php中使用此类代码。

public function getBlogPost($userId)
{
    return $this
        ->_em
        ->createQueryBuilder('p')
        ->leftJoin('p.user', 'u')
        ->where('u.id = :id')
        ->setParameter('id', $userId)
        ->getQuery()
        ->getResult();
}

createQueryBuilder('p')会自动创建select和from(从表中选择实体(post?))。 然后,您可以像这样使用它:

$posts = $entityManager->getRepository('<BundleHere>:BlogPosts')->getBlogPost($userId);

我无法向您提供确切的查询,因为我们没有足够的关于您的实体的信息。但是这样,你可以编写好的查询来获得你想要的东西。

答案 1 :(得分:0)

你可以这样做:

$posts = $entityManager->getRepository('<BundleHere>:BlogPosts')
    ->createQueryBuilder('b')
    ->whereIn('b.user', $followedUsers)
    ->getQuery()
    ->getResult();

'user'应该是用于在Blogpost对象中保存用户的属性的名称。

答案 2 :(得分:0)

所以我想通了(感谢大家指点我使用查询生成器的正确方向)。

$followedByMe = $user->getFollowedByMe(); //Getting users i follow
$followedIds = $followedByMe
->map(function( $obj ) { //Using map method to create an array of id's for all followers
    return $obj->getId(); //Value to put into array (in this case id)
})->toArray(); //Create an array and assign it to $followedIds variable

$qb = $em->getRepository('<BundleHere>:BlogPosts')->createQueryBuilder('b');
$posts = $qb->where($qb->expr()->in('b.user', $followedIds ))
->orWhere('b.user = :my_id')->setParameter('my_id', $user->getId()) //Get my posts too
->getQuery()
->getResult();