Précédent   Forum du club des développeurs et IT Pro > PHP > Bibliothèques et frameworks > CakePHP
CakePHP Forum d'entraide sur le framework PHP CakePHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 02/11/2012, 13h49   #1
Noodlex
Invité de passage
 
Inscription : février 2009
Messages : 14
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 14
Points : 3
Points : 3
Par défaut CakePHP 2.2.3 Relation entre différents modèle

Bonjour,

Je débute avec CakePHP et je commence vraiment à l'adopter.
Seulement, j'ai un petit soucis au niveau des relations entre plusieurs modèles.

J'ai un modèle "Addresses"
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Addresses extends AppModel {
    public $name = 'Addresses';
    public $useTable = 'Addresses';
    public $table = 'Addresses';
    public $primaryKey = 'ID';
    public $hasMany = array(
        'Members' => array(
            'className'  => 'Members',
            'foreignKey' => 'Address_ID'
        ),
        'Instructors' => array(
            'className'  => 'Instructors',
            'foreignKey' => 'Address_ID'
        ),
        'Schedules' => array(
            'className'  => 'Schedules',
            'foreignKey' => 'Address_ID'
        )
    );
}
Et 3 autres modèles par exemple Members
Code :
1
2
3
4
5
6
7
8
9
10
11
12
class Members extends AppModel {
    public $name = 'Members';
    public $useTable = 'Members';
    public $table = 'Members';
    public $primaryKey = 'ID';
    public $hasOne = array(
        'Addresses' => array(
            'className'    => 'Addresses',
            'foreignKey'    => 'ID'
        )
    );
}
Voici le résultat de la commande
Code :
$this->Members->find('all');
On peut constater que la partie 'Addresses' est null.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
array(
	(int) 0 => array(
		'Members' => array(
			'ID' => '7',
			'FirstName' => 'Christopher',
			'LastName' => 'Rombach',
			'Mail' => 'ngrooog@jgir.com',
			'Sex' => true,
			'Birthday' => '1986-11-07',
			'Personnal' => true,
			'Group' => true,
			'GSM' => '1165161',
			'Phone' => '156156',
			'Address_ID' => '1',
			'Created' => '2012-11-02',
			'Edited' => '2012-11-02'
		),
		'Addresses' => array(
			'ID' => null,
			'Street' => null,
			'Number' => null,
			'PostalCode' => null,
			'City' => null
		)
	)
)
Et la requête générée par CakePHP
Code :
SELECT `Members`.`ID`, `Members`.`FirstName`, `Members`.`LastName`, `Members`.`Mail`, `Members`.`Sex`, `Members`.`Birthday`, `Members`.`Personnal`, `Members`.`Group`, `Members`.`GSM`, `Members`.`Phone`, `Members`.`Address_ID`, `Members`.`Created`, `Members`.`Edited`, `Addresses`.`ID`, `Addresses`.`Street`, `Addresses`.`Number`, `Addresses`.`PostalCode`, `Addresses`.`City` FROM `evidencefbase`.`Members` AS `Members` LEFT JOIN `evidencefbase`.`Addresses` AS `Addresses` ON (`Addresses`.`ID` = `Members`.`ID`) WHERE 1 = 1
Comment puis-je faire pour spécifier de ne pas faire une jointure sur `Members`.`ID` mais sur `Members`.`Address_ID` pour récupérer la partie "Address" qui est liée ?
Code :
SELECT `Members`.`ID`, `Members`.`FirstName`, `Members`.`LastName`, `Members`.`Mail`, `Members`.`Sex`, `Members`.`Birthday`, `Members`.`Personnal`, `Members`.`Group`, `Members`.`GSM`, `Members`.`Phone`, `Members`.`Address_ID`, `Members`.`Created`, `Members`.`Edited`, `Addresses`.`ID`, `Addresses`.`Street`, `Addresses`.`Number`, `Addresses`.`PostalCode`, `Addresses`.`City` FROM `evidencefbase`.`Members` AS `Members` LEFT JOIN `evidencefbase`.`Addresses` AS `Addresses` ON (`Addresses`.`ID` = `Members`.`Address_ID`) WHERE 1 = 1
Merci pour vos réponses.
Noodlex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2012, 12h53   #2
spoutbe
Nouveau Membre du Club
 
Développeur Web
Inscription : juin 2010
Messages : 16
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2010
Messages : 16
Points : 29
Points : 29
Dans Members tu as mis:
Code :
1
2
3
4
5
6
7
 
public $hasOne = array(
        'Addresses' => array(
            'className'    => 'Addresses',
            'foreignKey'    => 'ID'
        )
    );
Tu dois mettre foreignKey => 'Address_ID'

Tu ne respectes pas les conventions (modèles au singulier), c'est une nouvelle app ou une refonte d'une app sous cake ?
spoutbe est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h03.


 
 
 
 
Partenaires

Hébergement Web