0

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

4

2 回答 2

1

Visit在你的模型中试试这个

public $belongsTo = array('Room');

而不是hasOne.

也许这就是你想要的?

于 2013-08-13T18:56:03.937 回答
0

这个

public $hasOne = array(
    'room' => array(
        'className' => 'room',
        'foreignKey' => 'id'
    )
);

未正确设置。我看到你在遵守约定,所以这种关系可以用一条线来概括,比如

public $hasOne = array('Room');

这实际上是约定的优点,您无需进行太多配置即可使其工作。

(在房间模型中,public $belongsTo = array('Visit');如果需要,请反过来使用)

现在,把它排除在外,重新考虑你们的关系。检查文档,如果访问 hasOne Room,那么表格应该是

Visit                    Room
-----                    ----
id | etc                 id | visit_id

hasOne

hasOne:另一个模型包含外键。

所以为了让你的表像现在一样,关系应该是Visit belongsTo RoomRoom hasOne Visit(或者它可能有很多,取决于你)。

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

于 2013-08-13T18:50:03.573 回答