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 !
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
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
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.