2011-01-29 49 views
2

我正在开发一个个人项目。CakePHP bindModel工作,预设模型关联不是

我有两个模型'显示'和'插曲'。我有一个控制器'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'记录。看起来它并没有引用模型,因为我可以故意破坏模型类,而请求仍在继续。

做了很多检查,从事研究和测试后,我能得到它由find()请求之前添加以下到行动控制器开始工作:

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

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

回答

0

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

你一定的id字段正确定义?

两个表,你应该有id(INTsize)和发作也应该有show_id(INTsize)。

如果它是根据蛋糕惯例设置,你应该能够去除'foreignKey' => 'show_id'线和蛋糕将整理出来itself.`

+0

是的,我已经仔细检查了字段类型并正确设置。我也尝试过使用'foreignKey'设置,但没有使用相同的结果。我正在处理的主要问题是使用$ uses变量时未包含模型类。我故意将错误放入我的模型中,并且“使用”它们的控制器不会报错。 – 2011-01-30 17:56:13

0

这听起来像蛋糕是不使用你的模型文件,而是自动地生成一些基于表格。 听起来很愚蠢,但检查拼写错误的文件夹和文件名称,并且它们是小写字母。

0

在你的节目模式,你有情节外键设置为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' 
); 
} 

这可能无法正常工作,但之前我遇到过类似的问题,并且解决了这个问题。祝你好运。