2009-09-16 4 views

Répondre

1

Ceci est en dehors de la portée de Zend_Db_Table. Zend_Db_Table peut faciliter l'obtention de ces autres lignes (see here) mais ne le fera pas automatiquement. Vous pouvez consulter le Zend Framework Quick Start, il parle de l'utilisation du modèle DataMapper et cela pourrait être quelque chose que vous voulez examiner.

Une option vous devez étendre Zend_Db_Table_Row et dans la méthode init() interroger les autres tables pour les informations dont vous avez besoin. Vous pouvez spécifier une classe de ligne à utiliser dans votre classe Zend_Db_Table en remplaçant la variable rowClass:

protected $_rowClass = 'FooRow'; 

De commentaires:

require_once(dirname(realpath(__FILE__) . '/path/relative/to/articles/ArticleRow.php'); 
+1

J'ai déjà défini dependentTables et referenceMaps pour les tables. Mais je ne sais pas comment obtenir le résultat approprié de Zend_Db_Table (table article). Merci de votre aide – neobeacon

+0

Ceci est son code SQL. sélectionnez sec.title comme 'section', cat.title comme 'catégorie', auth.Name comme 'auteur', modi.Name comme 'modificateur', art. * de l'article art jointure externe gauche section sec sur sec.id = art.section_id jointure externe gauche catégorie chat cat.id = art.category_id jointure externe gauche utilisateur auth sur auth.id = art.author_id jointure externe gauche utilisateur modification sur modification .id = art.modified_by où art.id = '1' – neobeacon

+1

J'ai mis à jour ma réponse avec une solution potentielle. Je me sens vraiment comme si besoin de ce genre de fonctionnalité alors Zend_Db_Table est la mauvaise direction. – smack0007

9

Vous devez utiliser la fonctionnalité de setIntegrityCheck()Zend_Db_Table:

Quelque chose comme ceci devrait fonctionner:

$articleTable = new Article(); 
$select = $articleTable->select(); 
$select->setIntegrityCheck(false); 
$select->from('article', 'article.*'); 
$select->joinLeft('user', 'article.author_id = user.id', array('author_name'=>'author')); 
$select->where('article.id = 123'); 
$articleRecord = $articleTable->fetchRow($select); 

Vous pouvez vérifier le SQL généré à l'aide:

Zend_Debug::dump($select->__toString()); 

Notez que le retour Zend_Db_Table_Row objet est en lecture seule.

+0

Merci beaucoup – neobeacon

+0

Cela ne devrait pas être: $ select = $ articleTable-> select() -> setIntegrityCheck (false); (selon le manuel: http://framework.zend.com/manual/fr/zend.db.table.html#zend.db.table.advanced.usage). –

+0

Oui, vous avez besoin de setIntegrityCheck (false); Merci! J'ai mis à jour le code afin qu'il ne soit pas trompeur :) –

Questions connexes