2017-05-14 5 views
1

abgerufen werden kann Ich habe eine einfache Symfony-Controller geschrieben, wo ich zwei Tabelle als specialistarea und Arzt haben.Wie Daten aus mehreren Tabellen mit Join und Where-Klausel

dies die grundlegende Struktur der Tabelle ist

specialtyarea 
----------------- 
id | name  | 
----------------- 
1 | dentist | 
2 | physician | 

Physician Tabelle specialtyarea wie gezeigt verwandt ist:

Physician 
-------------------- 
id | name | specfk | 
-------------------- 
1 | John | 1  | 
2 | Doe | 2  | 
3 | Ann | 2  | 

alle Arzt Ich versuche Bereich 2

ist, wo Spezialität zu holen

Dies ist mein Codeschnipsel

public function getAllPhysicianAction($specId) 
{ 
    $id = $this->getDoctrine()->getRepository('Bundle:SpecArea') 
     ->find($specId); //assuming that this returns all the id from the specialty table 

    $allPhysician = $id->getPhysician()->... //kind of lost here  
} 

Wie kann ich alle Datensätze aus der Arzttabelle mit der Speziellen ID abrufen?

Antwort

0

Ich glaube, dass Sie einfach findBy in Ihrem Arzt Repository aufrufen können.

/** 
* @Route("/physicians/{specId}", name="getAllPhysician") 
*/ 
public function getAllPhysicianAction($specId) 
{ 
    $allPhysician = $this->getDoctrine() 
    //call the repository of your physician table 
    ->getRepository('Bundle:physician') 
    ->findBy(['specfk' => $specId]); 

    var_dump($allPhysician); 
} 
+0

keine Route gefunden Verwendung für getallphysician – parker

+0

@parker Hast du eine Route für getallphysician erstellt? Wenn nicht, dann poste bitte deine Routen-Konfiguration. – Gerjan

+0

Wo finde ich die Route-Konfigurationsdatei. bin neu zu symfony – parker

0

Verwenden Sie die findBy() Methode des „Arzt“ Repository: (. Sie haben nicht die tatsächlichen Einheiten veröffentlichen, damit ich das Feld/Entitätsnamen erraten)

$spec = $this->getDoctrine()->getRepository('Bundle:SpecArea')->find($specId); 

$physicians = $this->getDoctrine()->getRepository('Bundle:Physician')->findBy(['spec' => $spec]); 

Sie können auch verwenden $specId ID direkt, anstatt die gesamte Einheit aus der Datenbank zu holen:

$physicians = $this->getDoctrine()->getRepository('Bundle:Physician')->findBy(['spec' => $specId]); 

See: Working with Objects - Querying - By Simple Conditions

+0

was Feld, das Sie durch spec bedeuten kann bedeuten u die Fremdschlüssel in der Arzt Tabelle – parker

+0

„specfk“ .. es ist besser, Namen Feld Spaltennamen anstatt tatsächliche Datenbank zu erwähnen, wenn ein ORM – ShiraNai7

Verwandte Themen