+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Invité de passage
    Inscrit en
    février 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : février 2009
    Messages : 15
    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.

  2. #2
    Nouveau Membre du Club
    Développeur Web
    Inscrit en
    juin 2010
    Messages
    18
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : juin 2010
    Messages : 18
    Points : 35
    Points
    35

    Par défaut

    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 ?

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •