0

已经声明时如何附加到包含?

  1. 我称之为常规包含/查找:

    // A controller
    $this->Site->contain(array('User'));
    $site = $this->Site->find();
    
  2. 我想自动添加要包含的内容。我正在考虑通过添加到 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);
    }
    

为了使这项工作(自动添加模型以包含),我只需要$this->containVariable通过一个函数或变量进行更改,该函数或变量具有一个包含已包含内容的数组。在这种情况下,这将返回array('User'). 已经声明时如何附加到包含?是否存在包含包含的变量?

4

2 回答 2

0

除非有人能找到另一种解决方案,否则我得出的结论是:

不幸的是,我试图做的似乎不可能如何设计可包含性。我必须手动将我的模型添加到每个->contain()调用中。

于 2012-07-10T23:02:15.673 回答
0

我修复了可能与多个查找调用的持久包含类似的问题(使用 cakephp 1.3)。在为某个模型声明包含后,将为该模型设置:

$this->Behaviors->Containable->runtime

-其中 $this 是一些模型对象。'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')
    )
)
于 2012-07-24T20:26:16.943 回答