我正在开发个人项目。
我有两个模特'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'
)
)
)
);
现在虽然这有效但我仍然想知道为什么我的模型没有被正确调用。非常感激任何的帮助。谢谢!
答案 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'
);
}
这可能不起作用,但我之前遇到过类似的问题并解决了这个问题。祝你好运。