CakePHP bindModel工作,预设模型关联不行

时间:2011-01-29 04:48:57

标签: cakephp model associations belongs-to

我正在开发个人项目。

我有两个模特'Show'和'Episode'。我有一个控制器'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控制器时,我得到了我想要的“Episode”记录,但没有根据'belongsTo'配置中的'show_id'得到关联的'Show'记录。它似乎根本没有引用模型,因为我可以故意破坏模型类,但请求仍在继续。

经过大量的检查,研究和测试后,我能够通过在find()请求之前将以下内容添加到Ops控制器中来实现它:

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

现在虽然这有效但我仍然想知道为什么我的模型没有被正确调用。非常感激任何的帮助。谢谢!

3 个答案:

答案 0 :(得分:0)

如果以相同的方式查询显示,会发生什么?

您确定id字段的定义是否正确?

在两个表上你应该有id(INTsize),在剧集上也应该有show_id(INTsize)。

如果根据Cake惯例进行设置,您应该能够删除'foreignKey' => 'show_id'行,而Cake会自行对其进行排序。

答案 1 :(得分:0)

听起来像Cake没有使用你的模型文件,而是根据表自动生成一些文件。 这听起来很愚蠢,但检查文件夹和文件名是否有拼写错误,并且它们是小写的。

答案 2 :(得分: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'
 ); 
}

这可能不起作用,但我之前遇到过类似的问题并解决了这个问题。祝你好运。