CakePHP:hasMany模型关联不递归获取

时间:2011-09-08 00:39:42

标签: cakephp recursion model associations

我有以下关联:

网站 - hasMany - Sitekey Sitekey - belongsTo - Site

sites.id是主键 sitekeys.site_id是外键

站点模型中的

: var $ hasMany = array('Sitekey');

查询: $ this-> find('all',array('conditions'=> array('Sitekey.keyword_id'=> $ key),'recursive'=> 1));

使用该关联递归获取(找到'all')不起作用。我试过明确定义类名,外键等...

作为最后的努力,我只是尝试将网站模型更改为: var $ hasOne = array('Sitekey');

当我对此进行递归查找'all'时,它会进行连接并正确返回数据。知道我做错了什么或者我可以用来调试/修复问题的技术吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

在指定hasMany(和belongsTo,就此而言)时,您是否尝试过提供类和键?

var $hasMany = array( 'Sitekey' => array(
  'className' => 'Site',
  'foreignKey' => 'site_id'
));

对我来说,当Inflector没有正确地单数化和复数你的名词时会发生这种情况。我已经做了一个练习,总是先检查一下。

如果这确实有效,那么理论上你应该看看为什么它不能识别它。创建另一个模型栏(或它知道的其他单词),并为其提供与sitekey相同的关联,并查看它是否在您的站点中有效。如果是这样,那么它很可能是Sitekey上的变形器。

答案 1 :(得分:0)

这可能像这样简单吗?你使用它的$ this关键字(假设我们在控制器中)将是控制器的实例,而不是模型。因此,您的结果将基于控制器的默认模型。确保您的控制器“使用”您要查询的模型。

$results = $ModelName->find('all', array('conditions' => array('Sitekey.keyword_id' => $key), 'recursive' => 1));

我建议调查可容纳的行为。你可以获得更多的控制而不仅仅是使用递归。