我有以下关联:
网站 - 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'时,它会进行连接并正确返回数据。知道我做错了什么或者我可以用来调试/修复问题的技术吗?
谢谢!
答案 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));
我建议调查可容纳的行为。你可以获得更多的控制而不仅仅是使用递归。