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"
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
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
$this->Members->find('all');
On peut constater que la partie 'Addresses' est null.
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
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 ?
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.
Partager