2

我正在开发一个个人项目。

我有两个模型“Show”和“Episode”。我有一个控制器“操作”。

显示型号:

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'
   )
  )
 )
);

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

4

3 回答 3

0

如果以同样的方式查询Show会发生什么?

您确定id字段定义正确吗?

在两张桌子上都应该有id(INTsize),在剧集上也应该有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 回答