我想建立以下简单关系的模型:
一名乘客属于一辆汽车;一辆车有很多乘客。
乘客表有一个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,还有一个额外的步骤吗?
答案 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')))
));