Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bien le bonjour!
me voilà fort emprunté. J'ai beau avoir parcouru la documentation de Zend_Db de long en large, je n'arrive toujours pas à faire la plus simple requête à l'aide de l'objet select().
Premièrement, j'ai de la peine à comprendre la différence entre Zend_Db_Select et Zend_Db_Table_Abstract::select(). Le second apporte une modification à la méthode from(). Il en fait un INNER JOIN (Zend 1.11.4). Donc ça me fait beau planter mes requêtes :S ...
Mais bon, voici mon modèle tout bête :
class Library_Book extends Zend_Db_Table_Abstract { protected $_primary = 'id'; protected $_name = 'library_book'; protected $_dependentTables = array('Library_Book_Niveau'); } class Library_Niveau extends Zend_Db_Table_Abstract { protected $_primary = 'id'; protected $_name = 'library_niveau'; protected $_dependentTables = array('Library_Book_Niveau'); } class Library_Book_Niveau extends Zend_Db_Table_Abstract { protected $_primary = array('book_id', 'niveau_id'); protected $_name = 'library_book_niveau'; protected $_referenceMap = array( 'Book' => array( 'columns' => array('book_id'), 'refTableClass' => 'Library_Book', 'refColumns' => array('id') ), 'Niveau' => array( 'columns' => array('niveau_id'), 'refTableClass' => 'Library_Niveau', 'refColumns' => array('id') ) ); }
Jusque là, c'est encore plus ou moins juste? Je n'en suis pas même sûr... Enfin bref, là dessus, j'essaie de faire ceci:
*Récupérer tous les livres qui ont un niveau dont l'id = x*
Ainsi, voici ce que je tente de faire:
$table = new Library_Book(); $select = $table ->select() ->from(array('library_book' => 'library_book'), array()) ->joinLeft(array('nb' => 'library_book_niveau'), 'library_book.id = nb.book_id', array()) ->joinLeft(array('n' => 'library_niveau'), 'n.id = nb.niveau_id', array()) ->where('nb.niveau_id = ?', 1) ->order('n.label ASC') ->limit($limit, $start); echo $select;
Aussi curieux que cela paraisse, ça me fait une requête comme ceci:
SELECT "library_book_2".* FROM "library_book" LEFT JOIN "library_book_niveau" AS "nb" ON library_book.id = nb.book_id LEFT JOIN "library_niveau" AS "n" ON n.id = nb.niveau_id INNER JOIN "library_book" AS "library_book_2" ...
J'ai d'autres questions aussi, mais je crois que je vais commencer par ça. Peut-être que je comprendrai mieux la suite ...
Merci d'avance!
rekam
Dernière modification par rekam (15-03-2011 14:22:31)
Hors ligne
Bonjour,
En général je procède comme suit :
$table = new Library_Book(); $select = $table->select(); $select->from(array('library_book' => 'library_book'), array()) ->joinLeft(array('nb' => 'library_book_niveau'), 'library_book.id = nb.book_id', array()) ->joinLeft(array('n' => 'library_niveau'), 'n.id = nb.niveau_id', array()) ->where('nb.niveau_id = ?', 1) ->order('n.label ASC') ->limit($limit, $start); // Ensuite : $stmt = $select->query(); $result = $stmt->fetchAll();
Par contre je ne comprend pas pourquoi des array vide?
Il suffit de ne rien mettre : from(array('library_book' => 'library_book')) .
Il y a aussi la possibilité d'utiliser les dépendances, cf http://www.zendcasts.com/may-to-many-wi … m/2009/05/
Ensuite pour les question de fonctionnement de Zend_Db plus en profondeur je passe le relai.
Dede
Hors ligne
Pages: 1