Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP容器和模型关联_Php_Mysql_Cakephp - Fatal编程技术网

CakePHP容器和模型关联

CakePHP容器和模型关联,php,mysql,cakephp,Php,Mysql,Cakephp,我是CakePHP新手,发表了一篇关于我与关系和查找数据的问题的帖子。事实证明,我的关系似乎还不错,但搜索可以使用containables完成 假设我有3张表:预订、预订详情和包含以下数据的房间 table reservations id | confirmation_number | guest_id 1 123 1 table reservation_details -a reservation can have m

我是CakePHP新手,发表了一篇关于我与关系和查找数据的问题的帖子。事实证明,我的关系似乎还不错,但搜索可以使用containables完成

假设我有3张表:预订、预订详情和包含以下数据的房间

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 rooms - an entry in reservation_details has one room_id
id  |       Name       |     Location
 1          Room  1          building A      
 2          Room 2           building A  
这是我的模型/协会

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

 //ReservationDetail model
 public $actsAs = array('Containable');
 public $belongsTo = array('Reservation');
 public $hasMany = array('Room' => array('foreignKey' = 'id'));

 //Room model
 public $actsAs = array('Containable');
 public $belongsTo = array('ReservationDetail' => array('foreignKey' => 'room_id'));
我要做的是搜索预订,并返回预订详细信息和房间信息。现在所有的数据都被返回,除了房间信息是一个空数组。这是我要做的搜索

$reservation = $this->Reservation->find('all', array(
                                          'conditions' => array(
                                             'Reservation.guest_id' => $guest_id
                                           ),
                                           'contain' => array(
                                               'ReservationDetail' => array(
                                                        'Room'
                                                 )
                                             )
                                       ));
我相信MySQL查询应该是这样的

SELECT reservations.*, reservation_details.*, rooms.* from reservations
INNER JOIN reservation_details on reservation_details.reservation_id = reservation.id
INNER JOIN rooms on rooms.id = reservation_details.room_id
WHERE reservations.guest_id = '1'

模型之间的关系是错误的。 替换为:

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

//ReservationDetail model
public $actsAs = array('Containable');
public $belongsTo = array('Reservation', 'Room');

//Room model
public $actsAs = array('Containable');
public $hasMany = array('ReservationDetail');

“foreignKey”=“id”中有输入错误,应为“foreignKey”=>“id”。也许您的代码中有相同的输入错误?请在rooms表中添加一个新字段,作为
reservation\u id
as
foreign key
,用于
reservations
表。。并且不需要将
可包含的
行为添加到所有模型中。。。只需将此添加到AppModel上…尝试使用bake for models关联,这会让你的生活变得更美好easier@FazalRaselrooms表只包含关于房间本身的信息…每个房间都可以用于多个预订。这就是为什么我在预订详细信息中有一个房间id。谢谢,这很有效。我唯一要做的就是在房间模型中添加一个外键('ReservationDetail'=>array('foreignKey'=>'Room_id'))