1 votes

Pour obtenir la ligne complète avec les tables jointes dans Zend_Db_Table

Voici la structure de ma table.

http://img6.imageshack.us/img6/8730/articlek.jpg

Je veux obtenir un objet de ligne d'article à partir de id avec des noms de section et de catégorie au lieu de section_id et category_id ,et des noms d'utilisateur au lieu de author_id et modified_by.

Aidez-moi, s'il vous plaît.

9voto

Rob Allen Points 6376

Vous devez utiliser Zend_Db_Table 's setIntegrityCheck() fonctionnalité :

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é en utilisant :

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

Notez que les données retournées Zend_Db_Table_Row est en lecture seule.

1voto

smack0007 Points 5215

Ceci est en dehors de la portée de Zend_Db_Table. Zend_Db_Table peut faciliter l'accès à ces autres lignes ( voir ici ) mais il ne le fera pas automatiquement. Vous pouvez consulter le site Démarrage rapide de Zend Framework Il y est question de l'utilisation du modèle DataMapper, ce qui pourrait vous intéresser.

Une option que vous avez est d'étendre Zend_Db_Table_Row et dans la méthode init() d'interroger les autres tables pour les informations dont vous avez besoin. Vous pouvez spécifier une classe de rangée à utiliser dans votre classe Zend_Db_Table en surchargeant la variable rowClass :

protected $_rowClass = 'FooRow';

Des commentaires :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X