我不知道如何使它工作。
我有:
partner
包含字段的表id
和name
partner_address
一个包含两个字段的表:id_partner
和id_address
address
包含字段和引用的id
外部键的表id_town
town(id)
town
包含字段id
、aname
和的表postal_code
我想选择在特定城镇中的所有合作伙伴postal_code
此查询有效:
SELECT p.nom, v.nom
FROM partner p
JOIN partner_address pa
ON pa.id_partner=p.id
JOIN address a
ON pa.id_address = a.id
JOIN town t
ON a.id_town=t.id
WHERE t.postal_code='13480';
现在我想按照文档将它“翻译”成 Doctrine 2 完整语法。
所以我制作了一个自定义存储库:
src/Society/Bundle/MyProjectBundle/Repository/PartnerRepository.php
在这个存储库中,我正在尝试创建相应的函数:
<?php
namespace HQF\Bundle\PizzasBundle\Repository;
use Doctrine\ORM\EntityRepository;
class PartenaireRepository extends EntityRepository
{
/**
* Get all active partners from a given postal code.
*/
public function findAllActiveByCp($cp)
{
return $this->createQueryBuilder('p')
->where('p.dateVFin IS NULL')
->andWhere('p.cp=:cp')
->addOrderBy('p.cp', 'DESC')
->setParameter('cp', $cp);
}
}
注意:代码中的查询不是正确的,但这段代码在我制作的另一个自定义存储库中工作,所以我试图从这段代码开始。
我正在尝试这样的事情,但它不起作用:
public function findAllActiveByCp($cp)
{
$qb = $this->createQueryBuilder('p');
return $qb
->leftJoin('partner_address pa ON pa.id_partner=p.id')
->leftJoin('address a ON pa.id_address = a.id')
->leftJoin('town t ON a.id_ville=t.id')
->where('p.dateVFin IS NULL')
->andWhere('t.cp=:cp')
->addOrderBy('t.cp', 'DESC')
->setParameter('cp', $cp);
}
我收到此错误:
警告:Doctrine\ORM\QueryBuilder::leftJoin() 缺少参数 2,在第 18 行的 /blabla/Repository/PartenaireRepository.php 中调用并在 /blabla/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/ 中定义QueryBuilder.php 第 767 行