Sto provando a fare una semplice query di selezione con una sottoquery nella clausola SELECT e semplicemente non ho trovato un modo per farlo. Ho provato sia con DQL che con QueryBuilder, né lavoro. Il codice segue, per favore non dire che potrei semplicemente usare un join, questo è un esempio semplificato solo per illustrare il problema, ho casi d'uso legittimi per le subquery.Doctrine 2: come si usa una colonna di sottoquery (nella clausola 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);
la seguente relazione è definita nella tabella Indirizzo:
/**
* @ORM\ManyToOne(targetEntity="Addresstype")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="addresstype_id", referencedColumnName="addresstype_id")
* })
*/
protected $addresstype;
In SQL nativo, la query sarebbe simile a questa:
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
Tutte le idee?
appena provato, ho la errore seguente: [Errore semantico] riga 0, colonna 112 vicino 'addresstypeId': Errore: Classe NP \ entità \ Indirizzo non ha campo o associazione denominata addresstypeId Ha senso poiché il tipo di indirizzo non viene mai definito sull'entità Indirizzo, solo la relazione, quindi di solito non devi mai usare le chiavi esterne. – Rocket04
Copia semplicemente incolla la subquery per rispondere alla tua domanda. Non riesco a correggere questa subquery senza informazioni sulle entità (e sullo schema). È meglio se pubblichi la vera query con lo schema reale in ogni caso. La tua domanda "come usare una colonna di subquery" è stata esaudita, per favore accetta. Cercherò di aiutarti a scrivere una buona sottoquery (questa è un'altra domanda). – Flip
Ho aggiunto i dettagli dello schema. Immagino che sarebbe valso la pena menzionare che c'era una relazione lì dentro. – Rocket04