我从名为Visits的表中提取数据,我也想获取房间信息。单元格Visits.room_id引用Rooms.id,但是,CakePHP使用的是Visits.id,我假设是因为它是主键。
以下是表格
Visits - id is primary key. I even tried setting room_id as a foreign key when creating the table
id | guest_id | room_id | arrival_date | departure_date
Rooms - id is prmary key.
id | description | max_occupancy
所以基本上它在查询中执行以下操作
where Visits.id = Rooms.id
而不是
where Visits.room_id = Rooms.id
在我的访问模型中,我有以下
public $hasOne = array(
'room' => array(
'className' => 'room',
'foreignKey' => 'id'
)
);
以下是来自VisitsController
的查询示例$visits = $this->paginate('Visit', array(
'arrival_date >=' => $date
)
);
$this->set(compact('visits'));
有什么方法可以告诉CakePHP使用Visit.room_id而不是Visit.id吗?
答案 0 :(得分:1)
在Visit
型号
public $belongsTo = array('Room');
而不是hasOne
。
也许这就是你想要的?
答案 1 :(得分:0)
此
public $hasOne = array(
'room' => array(
'className' => 'room',
'foreignKey' => 'id'
)
);
设置不正确。我看到你坚持惯例,所以这种关系可以用像
这样的单线来概括public $hasOne = array('Room');
这实际上是约定的优点,你不需要配置它就可以工作。
(在房间模型中,如果需要,请public $belongsTo = array('Visit');
反过来使用它)
现在,把它排除在外,重新考虑你们的关系。 Check the docs,如果访问hasOne Room,则表格应为
Visit Room
----- ----
id | etc id | visit_id
在hasOne
hasOne:另一个模型包含外键。
所以为了保持你的桌子就像现在一样,关系应该是Visit belongsTo Room
和Room hasOne Visit
(或者它可能有很多,取决于你)。
(PD。我假设蛋糕v2.x)