2

私は3つのテーブルを持っています:user、、。 ユーザーは他のユーザーをフォローでき、ユーザーはによって関連付けられます。user_followersblog_posts
blog_postuser_id

私がフォローしている人々が書いたすべてのブログ投稿を取得する必要があります。
私は次のようなことを試しました:

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

そして、私はもっとたくさんのバリエーションを試しましたが、それを理解することはできません。たぶん誰かが1つだけでなく複数のオブジェクトで検索するより良い方法を知っています。

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')は、selectとfrom(select entity(post?)from table)を自動的に作成します。次に、このように使用できます:

$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 に答える