2011-07-24 26 views
1

我想鏈接CakePHP應用程序中的兩個(和更多)模型。爲什麼我的模型不能鏈接?

我有兩個數據庫表:clientsnotes。我有以下的模型類:

<?php 
class Client extends AppModel { 
    var $name = 'Client'; 
    var $hasMany = 'Note'; 
} 

和:

<?php 
class Note extends AppModel { 
    var $name = 'Note'; 
    var $belongsTo = 'Client'; 
} 

不過,我不認爲他們的鏈接。當我運行在控制器我得到以下輸出print_r($this->Client->find());

Array 
(
    [Client] => Array 
     (
      [id] => 1 
      [name] => Martin Bean 
     ) 

) 

如何我也獲取相關Note記錄每個Client

編輯:儘管已經在我的模型類上面,如果我放置在控制器以下:

$this->Client->Behaviors->attach('Containable'); 
print_r($this->Client->find('all', array('contain' => 'Note'))); 

我收到以下錯誤信息:

警告(512) :Model「Client」與模型「Note」沒有關聯[CORE/cake/libs/model/behaviors/containable.php,line 363]

我錯過了CakePHP食譜中沒有解釋的東西嗎?

編輯2:我不知道這是否有幫助;它的調試輸出:

ContainableBehavior ::安全殼() - CORE /蛋糕/庫/模型/行爲/ containable.php,線363 ContainableBehavior :: beforeFind() - CORE /蛋糕/庫/ model/behaviors/containable.php,line 121 ModelBehavior :: dispatchMethod() - CORE/cake/libs/model/model_behavior.php,line 169 BehaviorCollection :: trigger() - CORE/cake/libs/model/model_behavior.php,line 494 Model :: find() - CORE/cake/libs/model/model.php,line 2108 PostsController :: index() - APP/controllers/posts_controller.php,line 6 Dispatcher :: _ invoke () - CORE /餅/ dispatcher.php,線204分派器::調度() - CORE /餅/ dispatcher.php,線171 [主要] - APP /根目錄/ index.php的, 線83

+1

嘗試清除模型緩存以及'APP/tmp/cache/models' - 特別是如果您在初始創建並運行這些文件後添加了這些更改。有時它只需要〜 – Ross

+0

還要檢查你的(app_)模型是否存在任何'$ this->遞歸的蹤跡 - 如果它小於0,你將不會得到相關數據。 – Ross

回答

0

修好了!我的模型文件名不正確。

而不是client.phpnote.php我已將它們保存爲client_model.phpnote_model.php。現在一切正常!

0

看起來容易。$ this-> Client-> find('all',array('contains'=> array('Note')));

+0

這些模型在偶然的插件中? – dogmatic69

+1

如果可容納的是說,文件命名不正確或某些權限錯誤。蛋糕會在沒有文件的情況下即時創建模型實例,看起來問題在這裏。做pr(get_class($ this-> Client)),它會說AppModel。那麼你知道上述是真的。如果那說客戶端可能是注意問題 – dogmatic69

1

所以只是爲了確認

你有兩個表 '筆記' 和 '客戶'

兩者有一個名爲一個主鍵ID

'注意' 包含 '的client_id'

有是正確的測試數據,id爲1的'client'在幾個'note'行上

在您的find()調用之前,沒有$ this-> Client-> recursive = -1 ass ignment。

添加

$變種actsAs =陣列( '中可容納');

同時添加到您的客戶端和備註模型,或者只是將其添加到您的app_model.php中,以便將可容納的行爲自動附加到每個模型。

P.S如果您最近添加了一個新表或修改了一個字段,請將debug設置爲2以清除模型緩存。

+0

這是正確的。我將調試級別設置爲2,刷新緩存,並將'$ actsAs'聲明添加到'app_model.php'(我將它移動到我的'app/models /'目錄,但仍然得到'Model'Client'與模型「Note」錯誤消息沒有關聯 –

+0

你是否已經放棄了附加行爲調用?這很奇怪 – Leo

+0

我已經將我的控制器和相關模型的內容放在這裏:https://gist.github.com/1103085希望這可以顯示任何問題。 –

相關問題