如何在已声明时附加包含?
我打电话给普通的包含/发现:
// A controller
$this->Site->contain(array('User'));
$site = $this->Site->find();
我想自动添加要包含的内容。我想在模型中通过添加到find函数来做到这一点......就像这样:
// Site.php Model
function find($conditions = null, $fields = array(), $order = null, $recursive = null) {
if(!isset($this->containVariable) || !in_array('Box', $this->containVariable)) {
$this->containVariable[] = 'Box';
}
parent::find($conditions, $fields, $order, $recursive);
}
要使其工作(自动添加模型 Box 以包含),我只需要通过一个包含已包含内容的数组的函数或变量来更改$this->containVariable
。在这种情况下,这将返回array('User')
。如何在已经声明时追加包含?是否包含包含?
答案 0 :(得分:0)
除非有人能找到另一种解决方案,否则我得出结论:
不幸的是,我试图做的事情似乎不可能是如何设计的。我必须手动将我的模型添加到每个->contain()
次调用。
答案 1 :(得分:0)
我修复了类似的问题,持久包含多个查找调用(使用cakephp 1.3)。声明包含某个模型后,将为该模型设置:
$this->Behaviors->Containable->runtime
-where $这是一些模型对象。 'runtime'是一个基本上包含包含信息的数组。所以你很接近我相信,但不是:
$this->containVariable[] = 'Box'
你会:
$this->Behaviors->Containable->runtime['someModel']['contain'][] = 'Box'
为了能够指定不仅仅是模型,你必须设置像下面那样处理(也许相应地构建一个方法):
$this->Behaviors->Containable->runtime['someModel']['contain'][] = $model_contain_array
$ model_contain_array只是我为数组选择的任意名称,该数组包含您要为特定模型添加的包含信息。 $ model_contain_array的示例可能是:
array('modelName' => array(
'fields' => array('id', 'other'),
'otherModelName' => array(
'fields' => array('id', 'otherfield', 'etc')
)
)