Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je cherche à récupérer les enregistrements d'une table jointe via une classe modèle TRubriques (qui hérite de Zend_Db_Table_Abstract)
Voici ma classe :
/**
* Modèle associé à la table rubriques
*/
class TRubriques extends Zend_Db_Table_Abstract
{
protected $_name = 'rubriques';
protected $_primary = 'idRubrique';
protected $_referenceMap = array(
"Famille" => array(
"columns" => "estSousRubrique",
"refTableClass" => "TFamilles",
));
}
Je fais un fetchAll sur l'objet TRubriques (qui est $this->_rubriqueTable) pour récupérer tous les enregistrements de ma table "rubriques" :
$rubriques = $this->_rubriqueTable->fetchAll()->toArray();
Mais j'aimerai récupérer également le champ "libellé" de la table famille qui est représentée par la classe TFamilles.
Quelqu'un peut il m'aider ?
Par avance merci.
Hors ligne
il faut écrire une requête
le mapping d'une table sur une jointure est possible mais compliqué
je te conseille de lire la doc de Zend_Db_Select et d'utiliser une jointure
Zend_Db_Table par défaut te remonte la liste des objets puis sur chacun tu peux activer la récupération de l'élément lié
si tu as 1000 élément dans ta table cela fais 1001 requêtes alors que tu as le même résultat avec un Select et un jointure
sinon tu peux regarder ça
http://sekaijin.ovh.org/?p=21
c'est expérimental mais ça donne une voie pour faire automatiquement une jointure dans un Zend_Db_Table
A+JYT
Hors ligne
J'ai trouvé un autre moyen.
Dans mon controller je fais un select de tous mes id :
$select = $this->_rubriqueTable->select()
->from($this->_rubriqueTable, "idRubrique");
$rubriques = $this->_rubriqueTable->fetchAll($select)->toArray();
ensuite dans ma vue :
<?php foreach ($this->rubriques as $idRubrique) : ?>
<?php
$tRubriques = new TRubriques();
$rubrique = $tRubriques->find($idRubrique['idRubrique'])->current();
?>
puis pour récupérer le libelle de la table jointe :
<?php echo $rubrique->findParentTFamilles()->libelle; ?>
Et voilà, le tour est joué !
Merci sekaijin pour ta réponse
Hors ligne
pour de simple libellé c'est plus efficace
il faut passer par une jointure lorsque le volume de donnée devient trop lourd en chargeant toute la table
exemple la table client et la table adresse de livraison
impossible de charger toute la table adresse pour faire le boulot
A+JYT
Hors ligne