CakePHP附加到Containable / Contain

时间:2012-06-26 18:38:14

标签: cakephp cakephp-1.2

如何在已声明时附加包含?

  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);
    }
    
  3. 要使其工作(自动添加模型 Box 以包含),我只需要通过一个包含已包含内容的数组的函数或变量来更改$this->containVariable。在这种情况下,这将返回array('User')。如何在已经声明时追加包含?是否包含包含?

    的变量

2 个答案:

答案 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')
    )
)