首页 文章

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

提问于
浏览
1

我有以下关联:

网站 - hasMany - Sitekey Sitekey - belongsTo - 网站

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 回答

  • 2

    您是否尝试在指定hasMany时提供类和键(并且就此而言属于belongsTo)?

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

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

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

  • 0

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

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

    我建议也考虑一下可容纳的行为 . 您可以获得更多控制而不仅仅是使用递归 .

相关问题