2

我有 3 个表useruser_followersblog_posts。用户可以关注其他用户,
并且用户与 相关blog_postuser_id

我需要获取我关注的人写的所有博客文章。
我试过类似的东西:

$followedUsers = $user->getFollowedByMe(); //This one works
$posts = $entityManager->getRepository('<BundleHere>:BlogPosts')
                       ->findBy(array('user_id' => $followedUsers));

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

4

3 回答 3

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') 将自动创建选择和来自(从表中选择实体(发布?))。然后,您可以像这样使用它:

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

我无法为您提供确切的查询,因为我们没有关于您的实体的足够信息。但是通过这种方式,您可以编写很好的查询来获得您想要的结果。

于 2012-09-13T16:00:37.377 回答
0

你可以做:

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

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

于 2012-09-13T16:10:59.440 回答
0

所以我想通了(谢谢大家用queryBuilder为我指出正确的方向)。

$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();
于 2012-09-14T08:39:00.477 回答