2014-01-23 31 views
1

這裏還有另一個CakePHP問題!我有一個名爲blood_groups的表,它有blood_group_id和group字段。然後我有另一個表叫做捐助者,它有幾個字段,比如名字,姓氏等等。這個表中包含的另一個字段是外鍵'blood_group_id',它需要映射到檢索時的blood_group表。在捐助者註冊視圖中,我希望能夠從blood_groups表中檢索值,並使用formHelper(以及它們各自的id)顯示它們。CakePHP - 檢索另一個表中的選項列表,與表單助手/ Insulation之前一起使用

我已經通過了CAKE文檔,並且我明白我需要創建模型之間的關聯,但我正在努力想出這個模型。我應該在施主模型中創建$ hasOne關聯(考慮到施主表具有另一個表的fk)。我將如何去從blood_groups模型中檢索blood_groups的選項?

它應該像這樣工作(以及任何其他先決條件參與?): 在我DonorController -

$這個 - >設置( 'blood_groups',$這個 - >供體 - > Blood_Group-? >查找( '全部'));

在查看/給體/ add.ctp

回聲這 - $>形式 - >輸入( 'blood_group_id');

回答

2

通過關聯訪問數據很好。但是對於收音機或複選框,您需要查找('列表)。您的型號和變量名稱不匹配the CakePHP convention,應該沒有下劃線。

恰當地命名這應該已經足以填充輸入。

// controller 
$this->set('bloodGroups', $this->Donor->BloodGroup->find('list')); 
// view 
echo $this->Form->input('blood_group_id'); 

如果你不遵循某種原因的約定:

echo $this->Form->input('blood_group_id', array(
    'options' => $bloodGroups 
)); 

參見:

+0

首先,感謝您的回覆!好的,有沒有一個描述命名約定的cakePHP備忘單?還應該在DonorModel中設置一個$ hasOne關聯嗎?(事件雖然FK位於Donor表內,而不在血系統表中,正如cakePHP文檔中所建議的那樣) 謝謝! – LogixMaster

+0

捐獻者hasOne BloodGroup是正確的,因此捐獻者應該有一個字段blood_group_id。 約定,幾乎所有其他內容都可以在文檔中找到,請參閱http://book.cakephp.org/2.0/en/getting-started/cakephp-conventions.html – burzum

+0

Awsome。謝了哥們! – LogixMaster

0
Create one function in BloodGroup Model 
function getDonors(){ 
    $options = array(
     // 'conditions' => array('Donor.blood_group_id'=>$id), 
     'joins' => array(
      array(
       'alias' => 'Donor', 
       'table' => 'donors', 
       'type' => 'LEFT', 
       'conditions' => array(
        'Donor.blood_group_id = BloodGroup.blood_group_id', 
       ), 
      ) 
     ),    
     'fields' => array('Donor.name','Donor.surname','Donor.blood_group_id', 
         'BloodGroup.blood_group_id') 
    ); 
    $returnData = $this->find('all',$options); 
    return $returnData; 
} 

現在從控制器調用這個函數

App::import('model','BloodGroup'); 
$BloodGroup = new BloodGroup; 
$donorList = $BloodGroup->getDonors(); 
$this->set('donorList',$donorList); 

鑑於文件,你會得到捐助者的名單$donorList.

+0

這段代碼看起來很有趣。不過,我想註冊一個捐獻者,而不是通過blood_group檢索捐獻者。如果我對代碼的理解程度足夠高,那麼當血型指定某血blood_group_id時,這是通過血型獲得捐獻者的,對嗎? – LogixMaster

+0

我做了一個編輯,現在它給你所有的捐助者的名單,請更新你的問題插入問題 – Anubhav

+0

代碼看起來是最有趣的方面,它是*錯*,並鼓勵*壞*的做法。我懶得再次在這裏解釋,但至少有三件事是錯誤的。幾個關鍵字:測試,SoC,最佳實踐,模型實例化,別名,導入與使用。 – burzum

相關問題