5

Es scheint, als ob es zwei verschiedene Möglichkeiten gibt, zwei Tabellen mit dem Zend Framework zu verbinden, aber ich habe es noch nie gemacht, also weiß ich nicht, welcher der beste Weg ist.Der beste Weg, um eine Inner Join mit dem Zend Framework zu machen?

Das ist, was ich versuche ...

Ich habe 3 Tabellen in meiner Datenbank zu tun:

users 
    (id , name) 
groups 
    (id , name) 
group_members 
    (id , group_id , user_id) 

Ich versuche, um die Gruppen zu suchen, die ein Benutzer gehört und zeige das dem Benutzer an. Diese SQL-Anweisung funktioniert ziemlich gut (obwohl es eine bessere Möglichkeit gibt, sie zu schreiben). Es gibt nur die Spalten zurück, um die es sich bei der ID und dem Titel der Gruppe handelt.

SELECT groups.id, groups.title 
    FROM group_members 
     INNER JOIN groups 
     ON groups.id = group_members.group_id 
    WHERE user_id = $userId 

Wie kann ich das mit dem Zend Framework tun?

Antwort

9

Schließlich herausgefunden, wie es geht. Wenn Sie einen besseren Weg haben, lassen Sie es mich wissen.

$db = Zend_Db_Table::getDefaultAdapter(); //set in my config file 
$select = new Zend_Db_Select($db); 
$select->from('groups', array('id', 'title')) //the array specifies which columns I want returned in my result set 
    ->joinInner(
     'group_members', 
     'groups.id = group_members.group_id', 
     array()) //by specifying an empty array, I am saying that I don't care about the columns from this table 
    ->where('user_id = ?', $userId); 
$resultSet = $db->fetchAll($select); 

Dies wird eine Tabelle mit nur den Spalten ID und Titel zurückgeben. Die leere array() war der Schlüssel zum Entfernen der Spalten, die mir egal waren. Ich könnte dann etwas mit der Ergebnismenge machen.

0

Keine Notwendigkeit, Join zu verwenden, können wir stattdessen Zend_Db_Table für den Grund über das MVC-Muster verwenden. Ich habe diese Idee Formular here, # 10 von Filip. (Vielleicht nennen sie dies "Table Data Gateway"?)

+1

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und die zur Verfügung stellen Link als Referenz. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. – ekad