在CakePHP中设置模型关系中的键

时间:2013-08-13 18:43:08

标签: php cakephp model

我从名为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吗?

2 个答案:

答案 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 RoomRoom hasOne Visit(或者它可能有很多,取决于你)。

(PD。我假设蛋糕v2.x)