Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 25-10-2012 09:06:58

roswellenshort
Membre
Date d'inscription: 06-09-2012
Messages: 12

[MVC] Traitement d'une requête multicritères

Bonjour,

Depuis hier matin je coince sur une chose pourtant relativement simple mais je ne vois pas comment la traiter en utilisant le framework Zend (version 1.11.11).
En effet, pour mettre les choses dans le contexte, j'ai une table dans ma base de données (sous MySQL) qui contient des champs tels que 'date_emission', 'reference', 'coordonnees_longitude', 'coordonnees_latitude', 'zone_concernee' etc..
Je cherche à faire un formulaire de recherche avancée où l'utilisateur pourra rentrer des informations dans les champs date, reference etc etc
code (partiel) du formulaire)

Code:

class Application_Form_ChercherMulti extends Zend_Form
{

    public function init()
    {
        
    $dateemission = new Zend_Dojo_Form_Element_DateTextBox('date_emission',array ('class' => 'input_texte'));
    $dateemission->setLabel('Date emission du message')
                ->addFilter('StripTags')
                ->addFilter('StringTrim')
                ->addValidator('NotEmpty');
    $dateemission->setAttrib('id', 'date');
    
    $reference = new Zend_Form_Element('reference',array ('class' => 'input_texte'));
    $reference->setLabel('Référence du message')
                ->addFilter('StripTags')
                ->addFilter('StringTrim');
                
    
    
    $submit = new Zend_Form_Element_Submit ('sub');
    $submit->setLabel ('Lancer');
    
    $this->setAction('./avurnav/searchmulti');
    
    $this->addElements(array($dateemission,$reference,$submit));    
    
    }
}

C'est à partir de là que je coince au niveau du modèle et du contrôleur. En effet, comment faire en sorte que la clause "where" de la requête soit créée dynamiquement, c'est à dire que l'utilisateur peut très bien ne rien entrer dans certains champs. Je me doute que la requête va ressembler à

Code:

$select = $db->select()
            ->from ($this)
            -> where ('date_emission =  ?', $date_emission);

Mais comment faire en sorte que les AND ne soit pas obligatoires dans la requête ?
J'espère avoir été clair. Si vous avez besoin d'un bout de code complémentaire à l'appréhension de mon petit problème, j'en donne évidemment. Je vous remercie par avance.

Dernière modification par roswellenshort (25-10-2012 09:16:44)

Hors ligne

 

#2 25-10-2012 09:20:58

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: [MVC] Traitement d'une requête multicritères

Bonjour,

Je ne suis pas sur d'avoir bien saisi le problème, mais si c'est bien ce que j'ai compris il s'agit de mettre une ligne ->where par membre, et de les conditionner par des if.

Un exemple (je suis dans un dbTable) :

Code:

public function getElements($critere1 = null, $critere2 = null)
{
   $select = $this->select();
   if($critere1) $select->where('column1 = ?', $critere1);
   if($critere2) $select->where('column2 = ?', $critere2);
   return $this->fetchAll($select);
}

Hors ligne

 

#3 25-10-2012 09:47:52

roswellenshort
Membre
Date d'inscription: 06-09-2012
Messages: 12

Re: [MVC] Traitement d'une requête multicritères

Merci Théocrite, ça ressemble à ce que je veux. Je pensais pas que ça pouvait fonctionner comme ça. Le problème est en fait le suivant :
Par exemple, l'utilisateur dans le formulaire généré recherche en remplissant les champs date emission, reference. Une autre fois, il recherche les occurences en remplissant date emission, reference et la longitude. Et la requête s'adapte en ajoutant les AND nécessaires si le champ est rempli.

Hors ligne

 

#4 25-10-2012 09:50:47

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: [MVC] Traitement d'une requête multicritères

En fait dans ton traitement de formulaire, tu vas récupérer les valeurs des champs. Par défaut ces valeurs seront égales à null. Tu peux donc les passer à la fonction correspondante dans ton modèle table, et fonctionner comme je te le montrais ci-dessus.

Hors ligne

 

#5 25-10-2012 14:39:20

roswellenshort
Membre
Date d'inscription: 06-09-2012
Messages: 12

Re: [MVC] Traitement d'une requête multicritères

Merci Théocrite. Ca semble fonctionner. Je me compliquais la vie à regarder en mettant les paramètres dans un tableau etc, alors que la solution tient en 2 lignes. Il est temps que les vacances arrivent là.

Dernière modification par roswellenshort (25-10-2012 14:39:40)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages