2014-04-19 2 views
0

Je suis nouveau sur CakePHP et j'ai un peu de mal à comprendre comment configurer les associations de modèles.Associations de modèles pour CakePHP

Dire que j'ai 3 tables: paiements, réservations et reservation_details avec les données suivantes

table reservations 
id | confirmation_number | guest_id 
1   123      1 

table reservation_details -a reservation can have multiple entries (multiple rooms) 
id | reservation_id | date  | time | room_id | rate 
2   1   2014-18-04 13:00  1   9.99 
3   1   2014-18-04 13:00  2   4.99 

table payments - many payments for one reservation can be made 
id | reservation_id | payment_amount | payment_type | guest_id 
4   1     14.98    Cash    1 

Voici mon modèle Associations

//Reservation model 
public $hasMany = array('ReservationDetail', 'Payment'); 

//ReservationDetail model 
public $belongsTo = array('Reservation'); 

//Payment model 
public $belongsTo = array('Reservation'); 
public $hasMany = array('ReservationDetail' => array('foreignKey' => 'reservation_id')); 

Ce que je suis en train de faire est d'être en mesure de rechercher pour un paiement et il retournera la réservation correspondante et les détails de la réservation pour ce paiement. Ainsi, il récupèrerait tous les enregistrements de reservation_details partageant le même ID de réservation. La réservation est maintenant retournée, mais la réservation_details est retournée vide

La recherche suivante renvoie des informations de paiements et de réservations, mais un tableau vide de reservation_details.

$payment = $this->Payment->find('all',array(
             'conditions' => array(
             'Payment.guest_id' => '1' 
             ) 
           )); 

Je suis presque certain qu'il est se joindre à la table reservation_details sur payments.id = payments.reservation_id plutôt que payments.reservation_id = reservation_details.reservation_id. Lorsque je modifie manuellement payments.id à 1 (la valeur de reservation_id), les détails de la réservation sont renvoyés.

Je crois que la requête MySQL que je suis en train de réaliser serait quelque chose comme

SELECT reservations.*, reservation_details.*, payments.* from payments 
INNER JOIN reservations on reservations.id = payments.reservation_id 
INNER JOIN reservation_details on reservation_details.reservation_id = payments.reservation_ID 
WHERE payments.guest_id = '1' 

Répondre

0

Payment.php

ajouter un comportement maîtrisable AS-

public $actsAs = array('Containable'); 

PaymentsController.php

$payments = $this->Payment->find('all', array(
              'conditions' => array(
               'Payment.guest_id' => '1' 
              ), 
              'contain' => array(
               'Reservation' => array(
                'ReservationDetail' 
               ) 
              ) 

)); 

debug($payments); 
+0

Merci beaucoup! Fonctionne parfaitement! – user3476345

Questions connexes