Cakephp:BelongsTo Relationship

时间:2010-12-23 18:20:12

标签: cakephp

我想建立以下简单关系的模型:

一名乘客属于一辆汽车;一辆车有很多乘客。

乘客表有一个id和Car_id列,Car表有一个id列。

我的模特看起来像这样:

<?php
class Passenger extends AppModel {
   var $name = 'Passenger';
   var $belongsTo = 'Car';
} ?>

<?php
class Car extends AppModel {
   var $name = 'Car';
   var $hasMany = array (
      'Passenger' => array (
            'className' => 'Passenger',
            'foreignKey' => 'car_id'
         )
   );
}
?>

我的添加Passenger .ctp看起来像这样:

<?php
echo $this->Form->create('Passenger');
    echo $this->Form->input('car_id');
    echo $this->Form->end('Save');
?>

当我访问页面以添加乘客时,我看到的只是一个空的下拉框。为了用所有汽车填充Dropbox,还有一个额外的步骤吗?

3 个答案:

答案 0 :(得分:2)

首先,您忘记在Passenger模型中提及belongsTo关系:

<?php
class Passenger extends AppModel {
   var $name = 'Passenger';
   var $belongsTo = array('Car');
}
?>

接下来,在控制器的相应操作中,您需要从数据库中获取所有汽车的list,并将其设置为模型变量的复数形式($车)。你会这样做:

$cars = $this->Passenger->Car->find('list');
$this->set(compact('cars'));

这会将car_id输入字段转换为带有填充信息的下拉列表。

HTH。

答案 1 :(得分:2)

乘客只知道与之相关的汽车 - 此时没有。

在乘客控制器的add方法中,执行

$this->Car->find('list');

并将结果传递到您的视图中:

$this->set('cars',$cars);

在视图中,将$ cars变量作为字段声明中$ options的值:

echo $this->Form->input('car_id', array('options' => $cars));

或者,您可以执行以下操作:

echo $this->Form->input('Car.id', array('options' => $cars));

答案 2 :(得分:0)

$this->CompanyCashback->bindModel(array('belongsTo' => array(
        'CompanyBranch' => array('className' => 'CompanyBranch', 'foreignKey' => false, 'conditions' => array('CompanyCashback.publisher_id = CompanyBranch.publisher_id && CompanyBranch.branch_type = "online" ')),
        'PersonalInformation' => array('className' => 'PersonalInformation', 'foreignKey' => false, 'conditions' => array('CompanyCashback.publisher_id = PersonalInformation.user_id')),
        'Country' => array('className' => 'Country', 'foreignKey' => false, 'conditions' => array('PersonalInformation.country_id = Country.id')),
        'User' => array('className' => 'User', 'foreignKey' => false, 'conditions' => array('PersonalInformation.user_id = User.id')))
));