5

Il semble qu'il y ait plusieurs façons de joindre deux tables en utilisant Zend Framework, mais je ne l'ai jamais fait auparavant, donc je ne sais pas quelle est la meilleure façon de le faire.La meilleure façon de faire une jointure interne en utilisant le Zend Framework?

C'est ce que je suis en train de faire ...

J'ai 3 tables dans ma base de données:

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

Je suis en train de regarder les groupes qu'un utilisateur appartient et afficher cela à l'utilisateur. Cette instruction SQL fait à peu près le travail (bien qu'il puisse y avoir un meilleur moyen de l'écrire). Il ne renvoie que les colonnes qui me concernent, qui sont l'identifiant et le titre du groupe.

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

Comment puis-je faire cela avec Zend Framework?

Répondre

9

Enfin compris comment le faire. Si vous avez un meilleur moyen, s'il vous plaît faites le moi savoir.

$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); 

Cela renverra une table avec uniquement les colonnes id et title. Le vide array() était la clé pour enlever les colonnes dont je ne me souciais pas. Je pourrais alors faire quelque chose avec le jeu de résultats.

foreach ($resultSet as $row) { 
    //do something with $row->id or $row->title 
} 
0

Pas besoin d'utiliser Join, nous pouvons utiliser à la place Zend_Db_Table pour la raison sur le modèle MVC. J'ai eu cette idée forme here, # 10 par Filip (peut-être qu'ils appellent cela "Table Data Gateway"?)

+1

Bien que ce lien peut répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. – ekad