2010-12-23 84 views
5

我想模型以下简单的关系: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' 
     ) 
    ); 
} 
?> 

和我的外接客运.ctp看起来是这样的:

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

但是当我访问网页增加一个乘客,我看到的只是一个空的下拉框。为了让所有车辆都能安装Dropbox,我还需要采取更多措施吗?

+0

+1蛋糕PHP好的问题新蛋糕的PHP – XMen 2010-12-23 18:35:44

回答

2

首先,你忘了提belongsTo关系在您的客运模式:

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

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

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

这将car_id输入字段转换成一个下拉列表与人口信息。

HTH。

+0

+1,而我知道这已经,这是一个很好的解释。 – 2010-12-24 09:22:57

+0

嘿在这种情况下,我需要在控制器中包含'汽车'模型? – 2013-06-14 07:48:07

2

乘客将只知道它与之相关的汽车 - 在这一点上,没有。

在车厢控制器add方法,做

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

,并将结果传递到您的看法:

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

在视图中,给$车作为变量的值,对于现场声明中的$选项:

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

或者,你可以这样做:

echo $this->Form->input('Car.id', array('options' => $cars)); 
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'))) 
));