Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je suis en train de bosser sur un site de voitures d'occas. Je souhaite faire une requête pour récupérer toutes les marques dont j'ai des 4x4 en stock.
Pour l'instant j'ai mis en place la requête suivante qui fonctionne :
Dans le model Vehicules.php
$select = $this -> select() -> setIntegrityCheck(false) -> from (array('v' => $this -> _name), 'DISTINCT(`code_marque`)') -> join(array('m' => 'marques'), 'v.`code_marque` = m.`id_marque`', array('nom')) -> where("code_carroserie = '4x4');
Est-ce la bonne méthode et auriez-vous fait différemment ?
Merci pour vos lumières
Cordialement,
Kaimite
Dernière modification par Kaimite (15-03-2009 19:00:45)
Hors ligne
J'ai exactement le même problème...
Lorsque je mets le array() à vide pour le 3ème argument de join, alors la requête s'exécute sans message d'erreur.
-> join(array('m' => 'marques'), 'v.`code_marque` = m.`id_marque`', array('nom'))
en revanche, si je veux récupérer une colonne en particulier, j'ai le message d'erreur...
Merci pour vos lumières (bis)
Nico_bzh
Hors ligne
En cherchant dans le forum, j'ai trouvé l'astuce !!
Il faut utiliser le select = $select->setIntegrityCheck(false) ;
Du coup les jointures n'étaient pas autorisées. Il faut le savoir ce truc...
Hors ligne
Salut et merci pour la réponse.
Ce n'est pas un problème de jointure autorisée ou non, c'est surtout d'autoriser de mélanger dans un Row des infos venant des deux tables.
Tu peux, avec un objet Zend_Db_Table_Row_Abstract, modifier son contenu et utiliser la méthode save() pour faire une mise a jour dans la base, par exemple :
//--> Je récupère l'enregistrement de l'ID 35 $personne = $model -> find(35) -> current(); $personne -> nom = "un nouveau nom"; $personne -> save();
Ici le save() va enregistrer dans la bdd le nouveau nom.
Si, via une jointure, mon Row contient des données venant de plusieurs table, laquelle mettre à jour si j'utilise cette méthode save() ?
Donc par défaut Zend ne renvoi que les champ du model qui exécute la requête.
Avec $select->setIntegrityCheck(false) ; il te renvoi toutes les infos mais certaines méthodes ne sont plus accessibles.
C'est en tout cas ce que j'ai compris
Cordialement,
Kaimite
Hors ligne
Pages: 1