2011-01-29 27 views
2

私は個人的なプロジェクトの開発中です。CakePHP bindModel作業中、モデル結合なし

「ショー」と「エピソード」の2つのモデルがあります。私は1つのコントローラ 'Ops'を持っています。

ショーモデル:

class Show extends AppModel 
{ 
var $name = 'Show'; 

var $hasMany = array(
    'Episode' => array(
    'className' => 'Episode', 
    'foreignKey' => 'show_id' 
) 
); 
} 

エピソードモデル:

class Episode extends AppModel 
{ 
var $name = 'Episode'; 

var $belongsTo = array(
    'Show' => array(
    'className' => 'Show', 
    'foreignKey' => 'show_id' 
) 
); 
} 

オプスコントローラ:

class OpsController extends AppController 
{ 
var $name = 'Ops'; 
var $uses = array('Show','Episode'); 

function index() 
{ 
    $episodes = $this->Episode->find('all',array(
    'limit' => 10, 
    'order' => array('Episode.first_aired' => 'DESC'), 
    ) 
); 
    debug($this->Episode); 
    debug($episodes); 

} 
} 

オプスコントローラを実行している場合は、私がしたいように、私は 'エピソード' レコードを取得しますが、 'belongsTo'設定の 'show_id'に基づいて関連する 'Show'レコードを取得しないでください。要求がまだ進行しているモデルクラスを意図的に破ることができるので、モデルを全く参照していないようです。この作品ながら、今

$this->Episode = ClassRegistry::init('Episode'); 
$this->Episode->bindModel(
array('belongsTo' => array(
    'Show' => array(
    'className' => 'Show' 
    ) 
) 
) 
); 

、チェックをたくさんやって研究、およびテストの後、私は、find()要求の前オプスコントローラに以下を追加することで動作するようにそれを得ることができました私はまだ私のモデルが適切に呼び出されていない理由を知りたいです。どんな助けでも大歓迎です。ありがとう!

答えて

0

同じ方法でを表示するとどうなりますか?を表示しますか?

idのフィールドは正しく定義されていますか?両方のテーブルに

あなたはid(INTsize)を持つべきであるとエピソードにもshow_id(INTsize)があるはずです。

それはケーキの規則に従ってセットアップされた場合、あなたは'foreignKey' => 'show_id'行を削除することができるはずとケーキはケーキがあなたのモデルファイルを使用して、代わりに自動的に生成されていないようですね

+0

ええ、私はフィールドの種類をダブルチェックして正しく設定されています。私はまた、同じ結果を使用して 'foreignKey'設定を使用せずに試してみました。私が扱っている主な問題は、$ uses変数を使うときにモデルクラスがインクルードされないことです。私は意図的に私のモデルにエラーを入れました。そして、それらを使用するコントローラはエラーではありません。 –

0

itself.`それを整理しますいくつかはテーブルに基づいています。 それはダムと聞こえますが、フォルダやファイル名にスペルの誤りがないか、小文字であるかを確認してください。

0

あなたのShowモデルでは、エピソードの外部キーがshow_idに設定されています。これは、episode_idでなければなりません。しかし、私はそれが問題を引き起こしているとは思わない。

CakePHPの命名規則を変更することはできませんので、関連付けを定義している文字列を削除するだけです。

class Show extends AppModel 
{ 
var $name = 'Show'; 

var $hasMany = array(
    'Episode' 
); 
} 

class Episode extends AppModel 
{ 
var $name = 'Episode'; 

var $belongsTo = array(
    'Show' 
); 
} 

これは機能しない可能性がありますが、これまでに同様の問題にぶつかり、解決しました。がんばろう。

関連する問題