在没有获得关联模型的情况下检索模型 - CakePHP

时间:2011-04-07 04:13:48

标签: php cakephp

我使用find('all')函数从我的数据库中检索帖子记录,但是这也会返回与Post模型关联的所有用户信息以及belongsTo - hasMany关系。

这样做的缺点是用户模型包含密码和其他重要信息。这被视为安全问题吗?我无处回应有关视图的信息。

由于


修改

我修改了我的代码,但我仍然得到了相关的模型。

        $this->set('posts_list',$this->Post->find('all',array('contain' => false, 'order' => array('Post.price ASC'))));

有什么想法吗?

4 个答案:

答案 0 :(得分:27)

您有几种选择。您可以在模型上设置recursive属性:

$this->Post->recursive = -1;
$posts = $this->Post->find('all');

您可以指定recursive作为搜索选项:

$posts = $this->Post->find('all', array(
    'recursive' => -1,
    'conditions' => ...
);

您还可以在Post模型中使用Containable行为。在这种情况下,您可以指定一个空集:

class Post extends AppModel {
    var $actsAs = array('Containable');
}

$this->Post->contain();
$posts = $this->Post->find('all');

或者,在查询中指定:

$posts = $this->Post->find('all', array(
    'contain' => false,
);

Containable行为的好处是您稍后将其他模型与您的帖子相关联。假设您实现了Tag模型。现在你想找到一个带有它标签的帖子,但不是使用模型:

$posts = $this->Post->find('all', array(
    'contain' => array('Tag'),
);

答案 1 :(得分:5)

不一定。

但是当您不需要时,您正在检索信息。现在这不是问题,但请记住,当您拥有大量关联数据时,这将成为一个巨大的问题

考虑将recursive属性设置为-1(如果需要,则为0)

$this->Model->recursive = -1;

这将仅从所选模型中提取数据

或者,对于更精细的选择,您可以使用包含行为:http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html

这允许您选择在检索数据时要保留的关联。

答案 2 :(得分:2)

只是让你知道

$this->Model->recursive = -1 will remove all associations
$this->Model->recursive = 0 will remove only hasMany assosiation (so it keeps belongsTo)

答案 3 :(得分:0)

你用这个:

$this->Post->find('all')// If u access it from Post controller

OR,

$this->User->Post->find('all')//If u access it from User controller