2010-11-22 5 views
0

J'ai un NewsModel qui étend Zend_Db_Table_Abstract. le news-table se compose de: newsid, titre, texte et créateur. creater renvoie à un userid de la user-table. User-table se compose de userid et nom d'utilisateur.Modèle Zend avec jointure

Maintenant, je veux avoir l'utilisateur dans le NewsModel. Au moment

Au moment où je le fais dans le modèle:

$select = $this->select(Zend_Db_Table::SELECT_WITH_FROM_PART) 
         ->setIntegrityCheck(false); 
     $select->join('muskelpilot_users', 
     'muskelpilot_users.userid= muskelpilot_news.creater', 
     'username'); 
     return $this->fetchAll($select); 

est-il une autre solution pour résoudre ce problème sans une méthode?

+0

jusqu'à présent, je ne connais pas d'autres méthodes pour faire joint en utilisant zf. Je crois qu'en utilisant un ORM, vous devez spécifier la table jointe et les conditions de jointure, quoi qu'il arrive. – RageZ

Répondre

1

Vous pouvez spécifier des relations dans vos modèles, qui vous permettent de le faire:

$newsModel = new NewsModel(); 
$news = $newsModel->find(1); // find a row, returns an instance of Zend_Db_Table_Row 
$user = $news->findDependentRowset('User'); // returns instance of Zend_Db_Table_Rowset 

Jetez un oeil ici pour plus d'informations: http://framework.zend.com/manual/en/zend.db.table.relationships.html

1

Je crois que RageZ a raison de dire que vous ne pouvez pas avoir un seul modèle qui couvre plusieurs tables sans utiliser une sorte de ORM.

Cependant, vous pouvez facilement avoir les méthodes User_Row-> getNewsArticles() et News_Row-> getUser().