2016-07-19 19 views
-3

Ich habe diese, um herauszufinden versucht, (ich glaube wirklich einfach), was mehrere Tage:SQL-Abfrage CakePHP Übersetzung

Ich habe drei Tabellen mit diesen Feldern:

  1. alumnes: id , nomcognoms
  2. grups: id
  3. alumnesgrups: id, alumne_id (verwandt mit Alumnes.id) und grup_id (verwandt mit Grups.id). Dies ist eine Pivot-Tabelle (Join-Tabelle, relationale Tabelle ...)

Meine Frage ist:

Was soll ich Code in AvadiariesController.php, wenn ich eine Auswahlbox auffüllen möchten (in einem add.ctp) mit den Ergebnissen aus dieser Abfrage:

SELECT 
alumnes.nomcognoms 

FROM 
alumnes_grups 

INNER JOIN grups ON 
alumnes_grups.grup_id = grups.id 

INNER JOIN alumnes ON 
alumnes_grups.alumne_id = alumnes.id 

WHERE 
alumnes_grups.grup_id = '16-17 2nB' 

ORDER BY 
alumnes.nomcognoms 

Kann ich ein Anzeigefeld aus einer anderen Tabelle? Wie kann ich "Name" anstelle von "ID" sehen?

Benutzer Rechnung vorgeschlagen freundlich etwas, das ich (richtig?) Neu geschrieben zu:

$alumnesGrups = $this->Avadiaries->AlumnesGrups->Alumnes->find('list', 
    ['fields' => ['Alumnes.nomcognoms'], // keep the alias consistent with whatever you define in the join 
    'joins' => [['table' => 'alumnes', 
       'alias' => 'Alumnes', 
       'type' => 'INNER', 
       'conditions' => ['Alumnes.id' => 'AlumnesGrups.alumne_id']], 
     // mimic the above to join the other table 
       ['table' => 'grups', 
       'alias' => 'Grups', 
       'type' => 'INNER', 
       'conditions' => ['AlumnesGrups.grup_id' => '16-17 2nB'], 
       'order' => ['Alumnes.nomcognoms' => 'ASC']] 
       ] 
       ] 
    ); 

Jetzt add.ctp gibt keinen Fehler, aber diese Bedingung nicht angewendet wird:

'conditions' => ['AlumnesGrups.grup_id' => '16-17 2nB'] 

Ich brauche nur diesen Startpunkt, damit ich noch ein paar andere Dinge herausfinden kann.

Antwort

0

Ich fand schließlich die Lösung nach dieser document zu lesen.

$alumnesGrups = $this->Avadiaries->AlumnesGrups->find('all', [ 
'fields' => ['Alumnes.name'], 
'contain' =>['Alumnes', 'Grups'], 
'conditions' => ['Grups.id =' => 1] 
]); 

Mein Problem ist jetzt, dass ich bin immer { "alumnes": { "name": "Angela Smith"}} und nicht einfach nur "Angela Smith". Ich werde weiter suchen.

0

Probieren Sie etwas wie:

$this->AlumnesGrup->find('all', 
    array(
     'fields' => array(
      'Alumne.nomcognoms' // keep the alias consistent with whatever you define in the join 
     ), 
     'joins' => array(
      array(
       'table' => 'alumnes', 
       'alias' => 'Alumne', 
       'type' => 'INNER', 
       'conditions' => array(
        'Alumne.id = AlumnesGrup.alumne_id 
      ), 
      // mimic the above to join the other table 
     ), 
     'conditions' => array(
      'AlumnesGrup.grup_id' => '15-16 2nB' 
     ), 
     'order' => array(
      'Alumne.nomcognoms ASC' 
     ) 
    ) 
); 

Aus Gründen der Klarheit geändert ich Ihre Frage ein bisschen so etwas wie dieses:

SELECT 
alumnes.nomcognoms 

FROM 
alumnes_grups 

INNER JOIN grups ON 
alumnes_grups.grup_id = grups.id 

INNER JOIN alumnes ON 
alumnes_grups.alumnes_id = alumnes.id 

WHERE 
alumnes_grups.grup_id = '15-16 2nB' 

ORDER BY 
alumnes.nomcognoms