我有一个非常奇怪的问题。我正在尝试使用跨模型关系的条件进行查找。就是......
$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我看到的更改日志涵盖了这一点,您会认为这样一个明显的错误会在几天之后被追捕并修复,而不是等待整整一个月并且在发布公告中没有提及任何内容。
那么,呃,发生了什么事?
答案 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行为的使用。