Bonjour tout le monde,

J'ai deux tables Ventes et Clients.

Ce que je fait :

$this->set('mesventes', $this->Ventes->find('all', 
  array(
     'fields' => array('prix','telephone_vendeur','numero_dossier'),
     'group' => array('telephone_vendeur','numero_dossier')
  )
));

Les champs telephone_vendeur et prix et numero_dossier sont dans la table Ventes.

Ce que je veux :

Je veux afficher le nom du vendeur et l'adresse du vendeur qui sont dans la table Clients.
Je sais le faire en SQL mais pas avec CakePHP.

Merci de votre aide !

14 réponses


sirheisenberg
Auteur
Réponse acceptée

Tu as raison. Donc après ça il suffisait juste d'écrire la requête comme ça :

$this->set('mesventes', $this->Ventes->find('all', 
  array(
     'fields' => array('prix', 'Ventes.telephone_vendeur', 'Ventes.numero_dossier', 'Clients.nom', 'Clients.adresse'),
     'group' => array('Ventes.telephone_vendeur','Ventes.numero_dossier', 'Clients.nom', 'Clients.adresse')
  )
));

Merci à toi Kareylo

Quelle version de CakePHP, s'il te plait ?

La version 2

Si tu utilises le component "Containable" :

$this->Ventes->find('all', 
  array(
     'fields' => array('prix','telephone_vendeur','numero_dossier', 'Clients.adresse', 'Clients.nom'),
     'group' => array('telephone_vendeur','numero_dossier'),
     'contain' => array('Clients') // Nom du model
  )
)

Si tu ne l'utilises pas :

$this->Ventes->recursive = 1;
$this->Ventes->find('all', 
  array(
     'fields' => array('prix','telephone_vendeur','numero_dossier', 'Clients.adresse', 'Clients.nom'),
     'group' => array('telephone_vendeur','numero_dossier')
  )
)

Merci de ton aide Kareylo, malheureusement les 2 solutions ne fonctionnent pas. Dans les 2 cas j'ai cette erreur :

Error: SQLSTATE[42000]: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]The multi-part identifier "Clients.adresse" could not be bound.

Et quand j'enlève Clients.adresse j'ai la même erreur pour Clients.nom

Essaie sans le s à Clients

J'ai essayé et j'ai toujours la même erreur

Tu as bien mis le nom de tes champs au lieu de ceux que j'ai mis ? (Car je peux pas les deviner)

Et après, ça peut te parraître bête, mais as-tu jeté un oeil sur la documentation officielle pour comprendre le comportement du find ?

http://book.cakephp.org/2.0/fr/models/retrieving-your-data.html#find

"Tu as bien mis le nom de tes champs au lieu de ceux que j'ai mis ? (Car je peux pas les deviner)"

Oui ils s'appellent simplement adresse et nom

"Et après, ça peut te parraître bête, mais as-tu jeté un oeil sur la documentation officielle pour comprendre le comportement du find ?"

Oui mais je n'ai pas trouvé comment faire ce que je veux faire

As-tu bien fait les associtations dans tes différents modèle ?
http://book.cakephp.org/2.0/fr/models/associations-linking-models-together.html

En effet, ce n'est pas moi qui ai réalisé l'implémentation de la BDD et il n'y aucune association entre les modèles.
Si j'ai bien compris, dans le modèle Clients je dois mettre :

public $hasMany = 'Ventes';

Et dans le modèle Ventes :

public $hasAndBelongsToMany = array(
        'Clients' =>
            array(
                'className' => 'Clients',
                'foreignKey' => 'telephone_vendeur'));

Je ne sais pas à quoi ressemble ta base de données, mais avec un $hasMany d'un côté, on a un $belongsTo de l'autre.

Un plaisir ! Hésite pas à passer le sujet en résolu.