Ich versuche, eine einfache SELECT-Abfrage mit einer Unterabfrage in der SELECT-Klausel zu tun und habe einfach keine Möglichkeit gefunden, es zu tun. Ich habe sowohl mit DQL als auch mit dem QueryBuilder versucht, beide funktionieren nicht. Der Code folgt, bitte sagen Sie nicht, ich könnte nur einen Join verwenden, dies ist ein vereinfachtes Beispiel, nur um das Problem zu veranschaulichen, habe ich legitime Anwendungsfälle für Unterabfragen.Doktrin 2: Wie verwenden Sie eine Unterabfrage-Spalte (in der SELECT-Klausel)
// 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);
die folgende Beziehung auf der Adresstabelle definiert ist:
/**
* @ORM\ManyToOne(targetEntity="Addresstype")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="addresstype_id", referencedColumnName="addresstype_id")
* })
*/
protected $addresstype;
In nativen SQL würde die Abfrage wie folgt aussehen:
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
Irgendwelche Ideen?
Gerade versucht es, bekomme ich die Folgefehler: [Semantischer Fehler] Zeile 0, Spalte 112 in der Nähe von 'addresstypId': Fehler: Klasse NP \ entities \ Adresse hat kein Feld oder Assoziation mit dem Namen addresstypeId Sinnvoll, da addresstypId niemals in der Addressentity definiert wird, nur die Beziehung, Daher müssen Sie normalerweise keine Fremdschlüssel verwenden. – Rocket04
Ich kopiere einfach deine Unterabfrage, um deine Frage zu beantworten. Ich kann diese Unterabfrage nicht mit Informationen über Ihre Entitäten (und das Schema) reparieren. Es ist am besten, wenn Sie die echte Abfrage entweder mit dem richtigen Schema veröffentlichen. Ihre Frage "Wie verwende ich eine Unterabfrage-Spalte?" Wurde beantwortet, bitte akzeptieren. Ich werde versuchen, Ihnen beim Schreiben einer guten Unterabfrage zu helfen (das ist eine andere Frage). – Flip
Ich habe die Details des Schemas hinzugefügt. Ich denke, es wäre erwähnenswert gewesen, dass da eine Beziehung war. – Rocket04