2010-12-23 83 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'))) 
));