2014-01-23 66 views
0

我覺得相當不錯的愚蠢張貼了這個問題,但即時通訊徹底難倒了(可能是因爲IM相當新的蛋糕,有點嚇倒)..CakePHP的 - 數據檢索 - 模特協會與數據庫設計

     hasOne    hasOne 

     donors   |  blood_groups  |  donor_types 

Att ------------------+-----------------------+---------------------+   
    DonorID (pk)  | blood_group_id (pk) |  type_id (pk) | 
    Name    | group    |  type   | 
    Surname   |      |      | 
    type_id(fk)  |      |      | 
    blood_group_id(fk)|      |      | 

捐助模型

class Donor extends AppModel{ 
    public $hasOne = array(
     'BloodGroup'=> array(
      'className' => 'BloodGroup' 

     ), 
     'DonorType' => array(
      'className' => 'DonorType' 
     ) 
    ); 

我已經使用關聯的模型來填充捐助者註冊視圖中的FormHelper輸入,都很好。

然而,當我嘗試檢索捐獻記錄出現此錯誤

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'BloodGroup.donor_id' in 'on clause'

這ofcours意味着CakePHP是尋找FK donor_id內blood_groups表。然而,這種關係是相反的,fk存儲在捐助者表中。

我不知道數據庫設計是否有缺陷,或者是否需要在蛋糕中重新定義關聯。請幫忙,因爲我對CakePHP很陌生,因爲它的優點,我實際上被迫使用它。 我已閱讀關於蛋糕模型中的模型之間的關聯的所有部分,但我仍在掙扎。我怎麼去解決這個問題?

回答

2

爲了得到這個數據庫的建立,這是正確的工作ASSOCS是:

  • 捐贈屬於關聯血型
  • 捐贈屬於關聯DonorType
  • 血型的hasMany捐助
  • DonorType的hasMany捐助

但是你的外鍵是錯的:Follow the CakePHP conventions!

模型字段被認爲是較低的下標和下劃線,PK預計只是id,FKs是assoc,singular的模型名稱,後綴爲_id。捐助者表中的PK是正確的。

爲什麼你甚至改變自己的約定? DonorId vs blood_group_id作爲PKs?但是,如果您想要將它們命名爲您想要的名稱,但您必須在任何地方明確聲明它們。見linking models

我建議你在完成框架之前先做the blog tutorial以完成一個真正的項目。如下所示

+0

對於DonorID,這是一個粘貼的早期版本,我在實施前更改了一個。這個問題昨天發佈了兩次,但似乎沒有發佈,因此我轉發了它。這是原來的帖子: http://stackoverflow.com/questions/01/cakephp-retrieving-from-database-models-associations-database/21321330?noredirect = 1#comment32139276_21321330 – LogixMaster

+0

無論如何,我確實得到了博客教程,並且實際上發現它非常簡單,還有我需要了解OO背景以瞭解發生了什麼(至少我是這麼認爲的)。在這兩篇文章中,你們都給出了很好的答案,現在我意識到這些約定是一個很重要的因素!而且你是唯一一個給我所需要的關係的人,也就是我錯過了hasMany rel。因此,榮譽!這就是我接受你的答案的原因 我應該離開帖子還是刪除重複的帖子? – LogixMaster

1

變化的供體模型:

我在BloodGroup和條件在DonorType加入FOREIGNKEY:

class Donor extends AppModel{ 
     public $hasOne = array(
      'BloodGroup'=> array(
       'className' => 'BloodGroup', 
       'foreignKey' => 'blood_group_id' 

      ), 
      'DonorType' => array(
       'className' => 'DonorType', 
       'conditions' => array('Donor.type_id' => 'DonorType.type_id') 
      ) 
     ); 

原因上述錯誤:如果外鍵不相關聯陣列限定然後CakePHP的假定tablename_id是foreignKey。

+0

謝謝你的回答也是正確的,因爲你指定fk需要在關聯中明確定義,如果不遵循蛋糕的約定! – LogixMaster