Próbuję zrobić proste zapytanie z podzapytaniem w klauzuli SELECT i po prostu nie znalazłem sposobu, aby to zrobić. Próbowałem zarówno z DQL i QueryBuilder, ani pracy. Poniższy kod, proszę nie mówić, że mogę po prostu użyć join, jest to uproszczony przykład tylko zilustrować problem, mam legalne przypadki użycia podkwerend.Doctrine 2: w jaki sposób używasz kolumny podkwerendy (w klauzuli SELECT)?
// With QueryBuilder
$query = $qb->select(array('a',
'(SELECT at.addresstypeName
FROM e:Addresstype at
WHERE at.addresstypeId = a.addresstypeId
) AS addresstypeName'))
->from('e:Address', 'a')
->where('a.addressId = :addressId')
->setParameter('addressId', 1);
// With DQL
$dql = "SELECT a,
(SELECT at.addresstypeName
FROM e:Addresstype at
WHERE at.addresstypeId = a.addresstypeId
) AS addresstypeName
FROM e:Address a
WHERE a.addressId = :addressId";
$query = $em->createQuery($dql)->setParameter(':addressId', 1);
następującą zależność jest określona w tabeli Adres:
/**
* @ORM\ManyToOne(targetEntity="Addresstype")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="addresstype_id", referencedColumnName="addresstype_id")
* })
*/
protected $addresstype;
w natywnym SQL, zapytanie będzie wyglądać następująco:
SELECT
a.*,
(
SELECT at.addresstype_name
FROM addresstype at
WHERE at.addresstype_id = a.addresstype_id
) AS addresstype_name
FROM address a
WHERE a.address_id = 1
pomysłów?
prostu próbowałem go, otrzymuję następujący błąd: [Błąd semantyczny] linia 0, col 112 w pobliżu 'addresstypeId)': Błąd: Klasa NP \ podmioty \ Adres nie ma pola lub asocjacji o nazwie AddresspypeId Ma sens, ponieważ typ adresu nigdy nie jest zdefiniowany w encji Adres, tylko relacja, więc zwykle nie musisz używać obcych kluczy. – Rocket04
Po prostu kopiuj wklej swoje podkwerendy, aby odpowiedzieć na twoje pytanie. Nie mogę naprawić tego podkwerendy bez informacji o twoich jednostkach (i schemacie). Najlepiej, jeśli zamieścisz prawdziwe zapytanie z rzeczywistym schematem. Twoje pytanie "jak używać kolumny podkwerendy" zostało odebrane, proszę zaakceptuj. Postaram się pomóc ci napisać dobre podkwerendy (to jest kolejne pytanie). – Flip
Dodałem szczegóły schematu. Sądzę, że warto byłoby wspomnieć o tamtejszej relacji. – Rocket04