Bonjour,

Je suis sur CakePHP 2 et j'ai un problème concernant la "traduction" du WHERE sur CakePHP. Mon but est d'afficher le résultat d'une reqûete dans un PDF.

Ce que je fais

J'ai une table Ventes contenant les colonnes Acheteur, Vendeur, Prix et d'autres détails (Lieu de la vente par exemple).

Dans une page HTML, j'affiche le résultat de la requête ci-dessous dans un tableau HTML :

public function mavue() {
    $this->set('mesventes', $this-Ventes>find('all', 
    array('sum(prix)AS total','group' => array('nom_vendeur','nom_acheteur'))));
}

Sur chaque ligne du tableau HTML, il y a un lien qui envoie le nom du vendeur et le nom de l'acheteur de la ligne cliquée vers le contrôleur :

<?php echo $this->Html->link("PDF", array(
    "controller" => "nom du contrôleur",
    "action"     => "mavue_pdf",
    "?" => array(
       "nom_vendeur0" => $lesventes['Ventes']['nom_vendeur'],
       "nom_acheteur" => $lesventes['Ventes']['nom_acheteur']
    )
 )); ?>

J'ai une fonction dans le contrôleur qui récupère le nom du vendeur et le nom de l'acheteur de la ligne cliquée :

public function mavue_pdf(){

    $this->set('nom_vendeur1', $this->request->query("nom_vendeur0"));
    $this->set('nom_acheteur1', $this->request->query("nom_acheteur0")); 
}

Ce que je veux

Je veux exécuter cette requête :

SELECT detail1_vente, detail2_vente, detail3_vente, detail4_vente
FROM ventes
WHERE nom_vendeur = 'nom_vendeur1', nom_acheteur = 'nom_acheteur1'

Donc j'écris cela dans mon contrôleur (function mavue_pdf) :

$this->set('mesventes', $this->Ventes->find('all',
            array(
                'fields' => array('detail1_vente', 'detail2_vente', 'detail3_vente', 'detail4_vente'),
                'conditions' => array(
                    'nom_vendeur' => $nom_vendeur1, 
                    'AND' => array(
                        array(
                            'nom_acheteur' => $nom_acheteur1
                            )))
            )
        ));

Ce que j'obtiens

En enlevant les conditions, j'arrive à afficher les $nom_vendeur1 et nom_acheteur1 en faisant un simple echo dans mavue_pdf.ctp mais quand je mets les conditions j'ai une erreur qui me dit que les $nom_vendeur1 et nom_acheteur1 sont des Undefined variable.

Je suis nouveau sur CakePHP donc il se peut que ce soit une erreur de syntaxe ou de passage de variables mais je n'ai pas trouvé la solution.

Merci de votre aide !

8 réponses


sirheisenberg
Auteur
Réponse acceptée

Les joies de l'informatique : je n'ai rien changé et ça s'est mis à fonctionner comme de par magie, ce qui est bien vu que ça aurait dû marcher depuis le début.

Merci de ton aide Lartak

Tu n'as pas besoin du AND dans ta condition, il le fait nativement.

$this->set('mesventes', $this->Ventes->find('all',
            array(
                'fields' => array('detail1_vente', 'detail2_vente', 'detail3_vente', 'detail4_vente'),
                'conditions' => array(
                    'nom_vendeur' => $nom_vendeur1, 
                    'nom_acheteur' => $nom_acheteur1
            )
        ));

Merci de ton aide Kareylo ! Que j'enlève le AND ou pas malheureusement ça ne change pas grand chose.
J'ai réussi à afficher ce que je voulais en écrivant ça dans ma fonction mavuepdf :

$this->set('mesventes', $this->Ventes->find('all',
            array(
                'fields' => array('detail1_vente', 'detail2_vente', 'detail3_vente', 'detail4_vente'),
                'conditions' => array(
                    'nom_vendeur' => $this->request->query("nom_vendeur0"), 
                    'AND' => array(
                        array(
                            'nom_acheteur' => $this->request->query("nom_acheteur0")
                            )))
            )
        ));

Tout s'affiche correctement SAUF nom_acheteur qui ne veut pas s'afficher je ne sais pas pourquoi.

Bonjour.

Tout s'affiche correctement SAUF nom_acheteur qui ne veut pas s'afficher je ne sais pas pourquoi.

Si tu veux le champ nom_acheteur, il te faut l'ajouter dans la liste des champs que tu veux récupérer, soit dans la clé fields.

Bonjour Lartak, j'avais fait les modifications dans mon code mais pas dans mon message. J'ai déjà les champs nom_vendeur et nom_acheteur dans fields et nom_vendeur s'affiche mais pas nom_acheteur

j'avais fait les modifications dans mon code mais pas dans mon message

Comment voulez-vous que nous puissions vous aider correctement si vous ne nous fournissez pas le code actuel ?
Faites un minimum attention lorsque vous nous transmettez du code, car si vous nous donnez du code comme support mais qu'il ne correspond pas, je vois mal comment nous pourrons vous aider efficacement.

nom_vendeur s'affiche mais pas nom_acheteur

Fais un var_dump de la variable $mesventes pour que nous puissions voir ce que tu récupères exactement.

La correction de mon dernier message :

$this->set('mesventes', $this->Ventes->find('all',
            array(
                'fields' => array('detail1_vente', 'detail2_vente', 'detail3_vente', 'detail4_vente','prix','nom_vendeur','nom_acheteur'),
                'conditions' => array(
                    'nom_vendeur' => $this->request->query("nom_vendeur0"), 
                    'AND' => array(
                        array(
                            'nom_acheteur' => $this->request->query("nom_acheteur0"),
                            )))
            )
        ));

Le résultat du var_dump($mesventes) :

array (size=1)
 'Ventes' =>
    array (size=7)
      'detail1_vente' => string '3' (length=1)
      'detail2_vente' => string 'chaise' (length=6)
      'detail3_vente' => string '1995' (length=4)
      'detail4_vente' => string '150' (length=3)
      'prix' => string '39' (length=2)
      'nom_vendeur' => string 'Dupont' (length=6)
      'nom_acheteur' => string 'John' (length=4)

Dans le var_dump il y a bien la clé du champ nom_acheteur, je ne comprends donc pas ton problème.
À moins que tu veuilles dire que la valeur retournée est vide dans certains enregistrements de la table, mais dans ce cas c'est simplement qu'il te manque des données dans la table.