Я не понимаю, как заставить его работать.Как работает createQueryBuilder и leftJoin?
у меня есть:
- стол
partner
с полямиid
иname
- стол
partner_address
с двумя полями:id_partner
иid_address
- столиком
address
с полямиid
и внешним ключомid_town
который ссылаетсяtown(id)
- стол
town
с fie LDSid
,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';
Теперь я хочу, чтобы «перевести» его в доктрине 2 полный синтаксис, следующий the documentation.
Так что я сделал пользовательский репозиторий:
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);
}
}
Nota: запрос в коде не является правильным, но этот код работает в другом пользовательском репозитории, который я создал, поэтому я пытаюсь начать с этого кода.
Я пытаюсь что-то вроде этого, но он не работает:
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);
}
Я получаю эту ошибку:
Warning: Missing argument 2 for Doctrine\ORM\QueryBuilder::leftJoin(), called in /blabla/Repository/PartenaireRepository.php on line 18 and defined in /blabla/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php line 767
У меня все еще есть эта проблема с« ManyToOne ». Один элемент может иметь один или несколько контактов. Поэтому, с моей точки зрения, это должен быть OneToMany, а не ManyToOne. Я прав. А если нет, есть ли у вас «простой способ» избежать этого недоразумения? –
Да, у вас есть право. У меня есть «опечатка» в моем ответе, только что отредактированная :). Конечно, в моем коде есть «OneToMany». Тем не менее, надеюсь, что я помог. Помните, что вы обязаны выбрать корневой объект. – Athlan
Вы правы! Я нахожусь на правильном пути: в моем 'PartenaireRepository.php' это работает:' $ this-> createQueryBuilder ('p') -> leftJoin ('p.adresses', 'a'); ', но теперь, если я хочу ** другой ** присоединиться к адресам, как я могу это сделать? –