Ich bin ziemlich neu in Symfony und Doctrine und ich kann keine Lösung für mein Problem finden.Symfony/Doctrine: Wählen Sie mehrere Tabellen
Ich habe eine Datenbanktabelle transactional
und eine customer
genannt. In der Tabelle transactional
befindet sich ein Fremdschlüssel für die Tabelle customer
. Jetzt möchte ich alle Daten von beiden Tabellen bekommen. Aber die Kundenfelder sind alle auf null gesetzt. Hier
ist der Fremdschlüssel in der transactional
PHP Objekt:
transactional
:
/**
* @var \AppBundle\Entity\Customer
*
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Customer")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="fk_customer", referencedColumnName="id")
* })
*/
private $fkCustomer;
Die Lehre Abfrage:
$em = $this->getDoctrine()->getManager();
$transactions = $em->getRepository('AppBundle:Transactional')->findAll();
dump($transactions);
Das Ergebnis:
0 => Transactional {#483 ▼
-id: 1
-date: DateTime @1510873200 {#493 ▶}
-fkCustomer: Customer {#566 ▼
+__isInitialized__: false
-id: 1
-gender: null
-firstname: null
Vielen Dank für Ihre Zeit und Hilfe. =)
Danke, ich habe die erste Option bisher versucht, aber es hat nicht geklappt. Aber ich lese jetzt in den zweiten. – Dario
Hey, ich habe die zweite Lösung noch nicht ausprobiert, bin aber auf etwas gestoßen. Im Symfony-Debugging-Tool habe ich folgende Abfrage gefunden: SELECT t0.id AS id_1, t0.date AS date_2, t0.fk_customer AS fk_customer_3 FROM transactional t0. Sollte es keine Join-Anweisung geben? Oder wird die Join-Anweisung durch die Doktrin behandelt? – Dario
Nein, wenn Sie die Standard-Repository-Funktionen wie findAll-Doktrin verwenden, wird nur die Tabelle für diese Klasse abgefragt.Wenn EAGER funktioniert, sollte es ihnen ja beitreten, aber ich habe auch Fälle, in denen der EAGER so gut wie nichts tut. Ich benutze immer benutzerdefinierte Repositories in diesen Fällen, weil ich die Abfrage definieren kann, die verwendet werden sollte, und durch den manuellen Join tatsächlich eine einzige Datenbankabfrage anstelle von vielen erreichen – Joe