1

次のフィールドを持つこのエンティティがあります。

Andrei\StatisticsBundle\Entity\Visit:
    type: entity
    table: visits
    id:
        id:
            type: integer
            generator: { strategy: AUTO }
    fields:
        counter:
            type: integer
        createdAt:
            type: datetime
            column: created_at
    manyToOne:
        visitor:
            targetEntity: Andrei\StatisticsBundle\Entity\Visitor
            inversedBy: visits
            joinColumn:
                name: visitor_id
                referencedColumnName: id
        website:
            targetEntity: Andrei\StatisticsBundle\Entity\Website
            inversedBy: visits
            joinColumn:
                name: website_id
                referencedColumnName: id
        country:
            targetEntity: Andrei\StatisticsBundle\Entity\Country
            inversedBy: visits
            joinColumn:
                name: country_id
                referencedColumnName: id

そして、単純な選択条件を実行し、以下のように website_id データベース列に where を追加したいのですが、うまくいきません。website_id は現在、Visit エンティティのフィールドとして表示されており、むしろ Website オブジェクトのプロパティであると考えていますが、これらのタイプのクエリを実行する方法がわかりません。

$em = $this->getDoctrine()->getManager();

$repository = $em->getRepository('AndreiStatisticsBundle:Visit');

$qb = $repository->createQueryBuilder('v')
    ->select('SUM(v.counter) AS views, v.createdAt AS day')
    ->where('v.website.id = :website_id')
    ->setParameter('website_id', 3)
    ->groupBy('v.createdAt');

$visits = $qb->getQuery()->getScalarResult();
4

2 に答える 2

3

クエリを追加せずに getReference を使用して web サイト クラスのオブジェクトを取得し、それをパラメーターとしてリンクするだけです。

$em = $this->getDoctrine()->getManager();

$website    = $em->getReference('AndreiStatisticsBundle:Website', 3);

$repository = $em->getRepository('AndreiStatisticsBundle:Visit');

$qb = $repository->createQueryBuilder('v')
    ->select('SUM(v.counter) AS views, v.createdAt AS day')
    ->where('v.website = :website')
    ->setParameter('website', $website)
    ->groupBy('v.createdAt');

$visits = $qb->getQuery()->getScalarResult();
于 2013-11-14T13:12:38.363 に答える
0

leftJoininnerJoinを使用する

$em = $this->getDoctrine()->getManager();

$repository = $em->getRepository('AndreiStatisticsBundle:Visit');

$qb = $repository->createQueryBuilder('v')
    ->select('SUM(v.counter) AS views, v.createdAt AS day')
    ->innerJoin('v.website', 'w')
    ->where('w.id = :website_id')
    ->setParameter('website_id', 3)
    ->groupBy('v.createdAt');

$visits = $qb->getQuery()->getScalarResult();
于 2013-11-14T13:14:49.647 に答える