CakePHP find()不能跨模型工作

时间:2009-10-23 19:44:43

标签: cakephp

我有一个非常奇怪的问题。我正在尝试使用跨模型关系的条件进行查找。就是......

$this->Model->find('first', array(
    'conditions' => array(
        'Model.col1' => 'value',
        'RelatedModel.col2' => 'value2')));

...假设Model与RelatedModel有一个hasMany关系。这个特殊的发现炸弹出现以下错误信息:

Warning (512): SQL Error: 1054: Unknown column 'RelatedModel.col2' in 'where clause' [CORE/cake/libs/model/datasources/dbo_source.php, line 525]

查看正在进行的SELECT,我很快注意到相关模型中的比较实际上是放在WHERE子句中,但由于某种原因,FROM子句中唯一的东西是Model,没有相关模型的迹象。如果我删除使用该关系的比较,则会在结果中提取相关模型。

我正在使用Cake 1.2.4。乍一看,1.2.4中没有任何内容 - > 1.2.5我看到的更改日志涵盖了这一点,您会认为这样一个明显的错误会在几天之后被追捕并修复,而不是等待整整一个月并且在发布公告中没有提及任何内容。

那么,呃,发生了什么事?

1 个答案:

答案 0 :(得分:2)

如果您的模型使用Containable行为,请确保包含这些模型。

首先,在您的{model_name} .php文件中:

class {ModelName} extends AppModel {
    var $actsAs = array('Containable');
}

然后在你的发现中:

$results = $this->Model->find('first', array(
    'conditions' => array(
        'Model.col1' => 'value',
        'RelatedModel.col2' => 'value2',
    ),
    'contain' => array('RelatedModel'),
));

如果不使用Containable行为,请尝试显式增加递归级别:

$results = $this->Model->find('first', array(
    'conditions' => array(
        'Model.col1' => 'value',
        'RelatedModel.col2' => 'value2',
    ),
    'recursive' => 1,
));

请注意,后一种方法很可能会检索大量不必要的数据,从而降低应用程序的速度。因此,我强烈建议实施Containable行为的使用。