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