2

私は個人的なプロジェクトを開発中です。

「ショー」と「エピソード」の 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);

 }
}

Ops コントローラーを実行すると、必要な「エピソード」レコードが取得されますが、「belongsTo」構成の「show_id」に基づいて関連する「ショー」レコードが取得されません。リクエストがまだ続いているモデルクラスを意図的に壊すことができるので、モデルをまったく参照していないようです。

多くのチェック、調査、およびテストを行った後、find() 要求の前に Ops コントローラーに以下を追加することで機能させることができました。

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

これが機能している間、モデルが適切に呼び出されない理由を知りたいです。どんな助けでも大歓迎です。ありがとう!

4

3 に答える 3

0

同じ方法でShowをクエリするとどうなりますか?

idフィールドが正しく定義されていることを確認しますか?

両方のテーブルに(INTsize)がidあり、エピソードにもshow_id(INTsize)があるはずです。

Cakeの規則に従って設定されている場合は、行を削除できるはずです'foreignKey' => 'show_id'。Cakeはそれを自動的に分類します。`

于 2011-01-30T10:47:43.640 に答える
0

Showモデルでは、Episode外部キーが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'
 ); 
}

これはうまくいかないかもしれませんが、私は以前に同様の問題にぶつかり、これで解決しました。幸運を。

于 2011-04-08T22:12:11.437 に答える
0

Cake はモデル ファイルを使用しておらず、代わりにテーブルに基づいて自動的にモデル ファイルを生成しているようです。ばかげているように聞こえますが、フォルダーとファイル名にスペルミスがないか、小文字であることを確認してください。

于 2011-01-31T16:39:30.080 に答える