我见过类似的问题,但他们的答案对我来说似乎没有用。这看起来应该是非常简单的,所以我觉得非常愚蠢。
我有一个名为Preappform的模型,它有许多代理模型(对于Preappform都有belongsTo)。 Agent模型有一个包含哈希的字段。当我检索Preappform时,它会自动返回任何与相应外键相关的代理,但是我想限制此代理列表以仅包含其Agent.hash字段与提供的条件匹配的代理。
这是当前的代码:
class Agent extends AppModel {
var $name = "Agent"; // Singular for instances.
var $belongsTo = array('Preappform');
}
class Preappform extends AppModel {
var $name = "Preappform";
var $hasMany = array('Agent');
/* snip, some validation stuff */
}
// $id = 18
// $hash is set to false, or a nonexistent value.
$the_form = $this->Preappform->find('first',
array(
'conditions' => array('Preappform.id' => $id),
'contain' => array('Agent' => array('conditions' => array('Agent.hash' => $hash)))
)
);
Arrray ( [Preappform] => Array ( [id] => 18 [created] => 2010-12-03 08:56:12 [modified] => 2010-12-03 08:56:12 [completed] => 0 /* ... */ ) [Agent] => Array ( [0] => Array ( [id] => 1 [preappform_id] => 18 [hash] => f312d4b401fecc8ce0f8dca6eb7c1ca6ad9f5956 ) [1] => Array ( [id] => 2 [preappform_id] => 18 [hash] => f312d4b401fecc8ce0f8dca6eb7c1ca6ad9f5957 ) ) )
我已经在Preappform模型上玩了各种版本的“包含”和“递归”的不同值,但似乎无法过滤可用的代理。
我认为它会像
一样简单$the_form = $this->Preappform->find(
'first',
array('conditions' => array(
'Preappform.id'=> $id,
'Agent.hash' => $hash
)
)
);
...但总是会出现“Unknown column:Agent ...”错误。
答案 0 :(得分:1)
在模型中
models/preappform.php // add this
var $actsAs = array('Containable');
在控制器
中models/preappform.php
$the_form = $this->Preappform->find(
'first',
array(
'conditions' => array('Preappform.id' => $id) ,
'contain' => array('Agent' => array('conditions' => array('Agent.hash'=>$hash)))
)
);
答案 1 :(得分:1)
与the answer by Ish Kumar类似,但有更正:
当我将以下行添加到Preappform模型时:
var $actsAs = array('Containable');
...以下代码中的'contains'条件开始按预期工作:
$the_form = $this->Preappform->find('first',
array(
'conditions' => array('Preappform.id' => $id),
'contain' => array('Agent' => array('conditions' => array('Agent.hash =' => $hash)))
)
);
谢谢!
答案 2 :(得分:0)
我相信你可以这样做:
array('contain' => 'Agent.hash = "'.$hash .'"')