Bonjour,

Voila je rencontre un petit problème avec mon code.

Je fait pti projet perso avec FullCalendar JS

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

Ce que je veux obtenir ce sont les valeurs des champs contenu dans la table PERSONNES.
Ex: nom, prenom, Sexe etc...

Ce que j'obtiens

Je n’obtiens pas une erreur mais aucun résultat ; seulement l'id de la table PERSONNE dans la table CLIENT ;

Merci d'avance

7 réponses


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'));
}
Fredo97
Auteur

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

Voici un extrait des resultats:

(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'));
}
Fredo97
Auteur

Merci pour cette réponse mais ça marche toujours pas:
-Model "Clients" is not associated with model "Personne"

  • Model "Clients" is not associated with model "Meet"

Je peux voir ta relation tu as avec tes tables (Meet, client,personnes)?

Fredo97
Auteur

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'));
}