2009-10-23 68 views
0

我有一个非常好奇的问题。我正在尝试在模型关系中使用条件进行查找。以智慧...CakePHP find()不能在模型中工作

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

...假设模型有一个hasMany关系到RelatedModel。这种特殊的发现炸弹了,出现以下错误信息:

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更新日志中没有任何内容可以涵盖此内容,并且您会认为这样一个明显的错误会在几天后被追捕并修复,而不是等待完整版月,并没有提及发布通告中的任何内容。

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

回答

2

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

首先,在您的{} 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'), 
)); 

如果不使用中可容纳的行为,然后再尝试明确地增加了递归级别:

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

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