0

クエリを実行した最初のエンティティを使用して、関連付けられている 1 対多のエンティティをロードしたいという問題があります。私が抱えている問題は、「$campaignLogs」のクエリを「status」==「public」に制限したいということです

以下の例は機能しませんが、私がやりたいことを示しています。where() は既に同等にクエリを設定または処理しているため、配列コレクションでは使用できないことがわかりました。

    $em = $this->getDoctrine()->getManager();
    $campaign = $em->getRepository('STLDevRPGBundle:Campaign\Campaign')->findOneByTitle($slug);
    // This is what doesn't work, I have to change the "get" somehow
    // or does this have to be a custom repository function?
    $campaignLogs = $campaign->getCampaignLogs()->where(array("status = 'public'"));
4

1 に答える 1

1

オプションのパラメーターを既存のカスタム メソッドに追加できます。次のようにします。

public function findOneByTitle($slug, $status = null)
{
    $qb = $this->createQueryBuilder('c');
    $qb->select('c');
       ->where('c.title = :title')
       ->setParameter('title', $slug);
    if ($status !== null) {
        $qb->join('c.campaignLogs', 'l');
        $qb->where('l.status = :status')
           ->setParameter('status', $status);
    }
    return $qb->getQuery()->getSingleResult();
}
于 2013-08-03T08:16:08.750 に答える