Bonjour,
Voila je rencontre un petit problème avec mon code.
J’ai une table CLIENTS liée avec la table PERSONNES. Et cette table CLIENTS est aussi lier avec la table MEETS. Maintenant je cherche à récupérer le contenu de la table PERSONNES depuis l'action de MEETS à travers la table CLIENT (pars ce que celle-ci contient l'id du personne) mais j’ai n'arrive vraiment pas.
J'ai essayé toute les options du "recursive" mais toujours rien.
PS: La table MEET et PERSONNE n'a aucune liaison.
Voici mon code:
public function index() {
$Meets=$this->Meet->find('all',array(
'fields'=>array('Meet.id','Meet.title','Meet.start','Meet.end','Meet.color','Meet.remark','Meet.presenceClient','Meet.id_prestation','Prestation.name','Meet.id_client','Meet.status',),
'recursive'=>1
)
);
$this->set(compact('Meets'));
}
Ce que je veux obtenir ce sont les valeurs des champs contenu dans la table PERSONNES.
Ex: nom, prenom, Sexe etc...
Je n’obtiens pas une erreur mais aucun résultat ; seulement l'id de la table PERSONNE dans la table CLIENT ;
Merci d'avance
Vu que tu parles de "recursive", c'est que tu es sous CakePHP 2.
As-tu chargé le behavior "Containable" ? Si oui, ajoute la clé "contain"
public function index() {
$Meets = $this->Meet->find('all', array(
'fields' => array('Meet.id', 'Meet.title', 'Meet.start', 'Meet.end', 'Meet.color', 'Meet.remark', 'Meet.presenceClient', 'Meet.id_prestation', 'Prestation.name', 'Meet.id_client', 'Meet.status'),
'contain' => array('Personne')
));
$this->set(compact('Meets'));
}
Merci pour votre réponse.
Même avec « contain » ça ne marche toujours pas. Je ne sais pas si c’est peut être dû à la relation entre mes tables
(int) 1 => array(
'Meet' => array(
'id' => '7',
'title' => 'Formation cake',
'start' => '2017-09-06 06:40:00',
'end' => '2017-09-11 06:25:00',
'color' => '#FF8C00',
'remark' => 'ok',
'status' => 'O',
'presenceClient' => 'Oui',
'id_prestation' => '3',
'id_client' => '2'
),
'Prestation' => array(
'id' => '3',
'id_professional' => '2',
'name' => 'Admin BDD'
),
'Client' => array(
'id' => '2',
'id_person' => '4' //C’est l'identifiant de la personne que je voudrais récupérer les champs
),
'children' => array()
)
moi je pense tu peux faire ceci:
public function index() {
$this->loadModel('Clients');
$Meets = $this->Clients->find('all', array(
'contain' => array('Personne','Meet')
));
$this->set(compact('Meets'));
}
Merci pour cette réponse mais ça marche toujours pas:
-Model "Clients" is not associated with model "Personne"
Dans le model Personne:
public $hasOne=array('Professional','Client','Prestation');
dans le model Meet:
public $belongsTo=array(
'Prestation'=>array(
'foreignKey'=>'id_prestation',
'fields'=>array('Prestation.id','Prestation.id_professional','Prestation.name')
),
'Client'=>array(
'foreignKey'=>'id_client',
'fields'=>array('Client.id','Client.id_person')
)
);
dans le model Client:
public $belongsTo=array(
'Personne'=>array(
'foreignKey'=>'id_person',
'dependent'=>true),
'Addresse'=>array(
'foreignKey'=>'id_address',
'dependent'=>true)
);
public $hasMany=('Meet');
Essaye un peu ceci
$db = $this->getDataSource();
$db->fetchAll(
'SELECT nom, prenom from personnes,meets,clients,prestations,professions where professions.personne_id=personnes.id AND clients.personne_id=personnes.id AND meets.client_id = clients.id';
);
et ceci aussi
public function index() {
$Meets = $this->Meet->find('all', array(
'fields' => array('Meet.id', 'Meet.title', 'Meet.start', 'Meet.end', 'Meet.color', 'Meet.remark', 'Meet.presenceClient', 'Meet.id_prestation', 'Prestation.name', 'Meet.id_client', 'Meet.status'),
'contain' => array('Client.Personne')
));
$this->set(compact('Meets'));
}