Cakephp中的可包含行为

时间:2013-06-18 19:16:10

标签: cakephp cakephp-2.0

根据我的知识很长一段时间,我使用递归来控制我的模型关系。如果我在我的模型之间建立任何关系,它肯定会与paginate自动连接。控制我需要使用递归。默认情况下,其值为1并且为contro;我必须将其用作-10。是的,我读到Containable行为,它是如何自动控制从其他模型获取结果的。虽然建立了关系。

我和写作一样经历过

public $actsAs = array('Containable'); 

在我的控制器中我写了

$this->Album->Behaviors->load('Containable', array('autoFields' => false, 'recursive'=>false));

但是我的默认分页也会调用其他模型的数据以及其他模型的查询。

$this->paginate['Album'] = array('conditions' => $condition, 'limit' => '50', 'order' => array('Album.id' => 'DESC'));
$this->set('albums', $this->paginate('Album'));

根据我的期望数据,我的默认分页代码只能来自Album Model,而要从其他模型中获取,我必须在Pagination中对其进行描述,但是当我在Debug Kit中检查它时,它显示了这一点。

enter image description here

以及从所有变量中获取数据。 enter image description here

我该怎么办?哪里我错了?

2 个答案:

答案 0 :(得分:1)

如果我错了,你不需要相关模型的数据,请纠正我。 为此,您需要将contains属性设置为false。这只会带来相册模型的数据

$this->paginate['Album'] = array('conditions' => $condition,'contain' => false 'limit' => '50', 'order' => array('Album.id' => 'DESC'));
$this->set('albums', $this->paginate('Album'));

当您想要使用

等查询附加多个模型时,包含将非常有用
$this->paginate['Album'] = array('conditions' => $condition,'contain' => array('model1','model2'), 'limit' => '50', 'order' => array('Album.id' => 'DESC'));

我希望这对你有用。感谢

答案 1 :(得分:0)

即使您的模型设置为可包含,您仍然可以将recursive设置为false以阻止获取相关数据。

样本模型:

<?php
class Article extends AppModel {

    public $actsAs = array('Containable');
    public $belongsTo = array('Category');
}

样本控制器:

<?php
class ArticlesController extends AppController {

    public function index() {
        $this->Article->recursive = 0;
        $this->set('articles', $this->paginate('Article'));
    }

    public function view($id) {
        $this->Article->recursive = 0;
        $this->set('article', $this->Article->findById($id));
    }
}
相关问题