CakePHP容器和模型关联
我是CakePHP新手,发表了一篇关于我与关系和查找数据的问题的帖子。事实证明,我的关系似乎还不错,但搜索可以使用containables完成 假设我有3张表:预订、预订详情和包含以下数据的房间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
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
asforeign key
,用于reservations
表。。并且不需要将可包含的行为添加到所有模型中。。。只需将此添加到AppModel上…尝试使用bake for models关联,这会让你的生活变得更美好easier@FazalRaselrooms表只包含关于房间本身的信息…每个房间都可以用于多个预订。这就是为什么我在预订详细信息中有一个房间id。谢谢,这很有效。我唯一要做的就是在房间模型中添加一个外键('ReservationDetail'=>array('foreignKey'=>'Room_id'))