CakePHP find() 不能跨模型工作
Posted
技术标签:
【中文标题】CakePHP find() 不能跨模型工作【英文标题】:CakePHP find() not working accross models 【发布时间】:2009-10-23 19:44:42 【问题描述】:我有一个非常奇怪的问题。我正在尝试使用适用于模型关系的条件进行查找。也就是说……
$this->Model->find('first', array(
'conditions' => array(
'Model.col1' => 'value',
'RelatedModel.col2' => 'value2')));
...假设 Model 与 RelatedModel 具有 hasMany 关系。这个特别的 find 会发出以下错误消息:
警告 (512):SQL 错误:1054:“where 子句”中的未知列“RelatedModel.col2”[CORE/cake/libs/model/datasources/dbo_source.php,第 525 行]
查看正在做的SELECT,我很快注意到相关模型中的比较实际上放在了WHERE子句中,但是由于某种原因,FROM子句中唯一的东西是Model,没有RelatedModel的迹象.如果我删除使用关系的比较,相关模型将被拉入结果中。
我使用的是 Cake 1.2.4。乍一看,我看到的 1.2.4 -> 1.2.5 更新日志中没有任何内容涵盖这一点,您会认为这样一个明显的错误会在几天后被追捕并修复,而不是等待一个完整的月,并且在发布公告中没有提及任何内容。
那么,呃,发生了什么事?
【问题讨论】:
【参考方案1】:如果您的模型使用 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 行为。
【讨论】:
以上是关于CakePHP find() 不能跨模型工作的主要内容,如果未能解决你的问题,请参考以下文章