Symfony 在原则中的WHERE子句中添加外键
我拥有具有以下字段的实体:Symfony 在原则中的WHERE子句中添加外键,symfony,doctrine,Symfony,Doctrine,我拥有具有以下字段的实体: Andrei\StatisticsBundle\Entity\Visit: type: entity table: visits id: id: type: integer generator: { strategy: AUTO } fields: counter: type: integer createdAt:
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,如bellow,但它不起作用。我相信网站id现在被视为访问权限的字段,它是网站对象的一个属性,但我不知道如何进行这些类型的查询:
$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();
您必须使用getReference获取website类的对象,而无需添加查询,然后将其作为参数链接
$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();
使用leftJoin的innerJoin
$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();