2011-07-24 13 views
1

私はCakePHPアプリケーションで2つ(以上)のモデルをリンクしようとしています。私のモデルがリンクされていないのはなぜですか?

私は2つのデータベーステーブル:clientsnotesを持っています。しかし、私は彼らがリンクしているとは思わない

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

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

そして:私は、次のモデルクラスを持っています。私は、コントローラでprint_r($this->Client->find());を実行すると、私は次のような出力が得られます。

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

) 

は、どのように私はまた、各Clientのために関連したNoteレコードを取得することができますか?

EDIT:私のモデルクラスで上記にもかかわらず、私はコントローラに次のように配置する場合:

警告(512):

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

私は、次のエラーメッセージが表示されますモデル "クライアント"はモデル "ノート"に関連付けられていません[CORE/cake/libs/model/behaviors/containable.php、行363]

私はCakePHPの料理本で説明されていない何かを忘れましたか?

EDIT 2:これは助けになるかどうかわかりません。それはデバッグ出力です:

ContainableBehavior ::格納容器() - CORE /ケーキ/ libsに/モデル/行動/ containable.php、ライン363 ContainableBehavior :: beforeFind() - CORE /ケーキ/ libsに/ CORE/cake/libs/model/behaviors.php、line 121 モデルビヘイビア:: dispatchMethod( )CORE/cake/libs/model/model_behavior.php、行169 BehaviorCollection :: trigger() - CORE/cake/libs/model/Model_behavior.php、494行目Model :: find() - CORE/cake/libs/model/model.php、行2108 PostsController :: index() - APP/controllers/posts_controller.php、行6 Dispatcher :: _ invoke () - CORE /ケーキ/ dispatcher.php、ライン204ディスパッチャ::ディスパッチ() - CORE /ケーキ/ dispatcher.php、ライン171 [メイン] - APP /ウェブルート/ index.phpを、 ライン83

+1

モデルキャッシュを 'APP/tmp/cache/models'と一緒に消去してみてください。特に、これらのファイルを最初に作成して実行した後に追加した方がいいでしょう。時にはそれはすべてです〜 – Ross

+0

また、 '$ this-> recursive'のトレースについて(app_)モデルをチェックしてください。0より小さい場合、関連するデータは取得されません。 – Ross

答えて

0

修正済み!私のモデルのファイル名が正しくありませんでした。

client.phpまたはnote.phpの代わりに、client_model.phpnote_model.phpとして保存しました。すべて今はうまくいく!

0

見ることができる。$ this-> Client-> find( 'all'、array( 'contains' => array( 'Note')));

+0

プラグインのこれらのモデルは偶然ですか? – dogmatic69

+1

が含まれていると、ファイルの名前が間違っているか、一部のアクセス許可エラーです。ケーキはファイルなしでオンザフライでモデルインスタンスを作成し、問題がここにあるようです。 do pr(get_class($ this-> Client))、AppModelと表示されます。上記が真であることをあなたは知っています。それはクライアントがおそらくノート問題があると言う場合 – dogmatic69

1

は、だから

を確認するために、次の2つのテーブル 'ノート' を持っていると「顧客

の両方がID

という名前の主キーがあり 'client_idの'

が含まれている 'ノート' を持ちますあなたのfind()呼び出しの前に、$ this-> Client-> recursive = -1 assというものはありません。点火する。

=( '収容可能')配列を

$するvar actsAsを追加します。

をClientモデルとNoteモデルの両方に追加するか、またはapp_model.phpに追加して、すべてのモデルに包含可能な動作を自動的に付加します。

P.S最近新しいテーブルを追加したり、フィールドを修正した場合は、モデルキャッシュをクリアするためにdebugを2に設定します。

+0

それは正しいです。私はデバッグレベルを2に設定し、キャッシュをフラッシュし、 '$ actAs'宣言を' app_model.php'に追加しました(私は 'app/models /'ディレクトリに移動しましたが、 –

+0

アタッチビヘイビアコールを落としましたか?これは奇妙です – Leo

+0

私はコントローラと関連モデルの内容をここにダンプしました:https://gist.github.com/1103085うまくいけば、これは問題を示すことができます。 –

関連する問題