我有3张牌桌:user
,user_followers
和blog_posts
用户可以关注其他用户,用户与blog_post
的{{1}}相关。
我需要收到我所关注的人写的所有博文 我试过像:
user_id
我尝试了很多变化,但无法弄清楚。也许有人知道一种更好的方法来搜索多个对象而不仅仅是一个。
答案 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();