私はそれを機能させる方法がわかりません。
私は持っています:
- フィールド
partner
とid
_name
partner_address
2つのフィールドを持つテーブル:id_partner
およびid_address
- 参照
address
するフィールドid
と外部キーを含むテーブルid_town
town(id)
town
フィールド、、、およびid
_name
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';
ここで、ドキュメントに従って、それをDoctrine2の完全な構文に「変換」したいと思います。
だから私はカスタムリポジトリを作りました:
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