我使用find('all')函数从我的数据库中检索帖子记录,但是这也会返回与Post模型关联的所有用户信息以及belongsTo - hasMany关系。
这样做的缺点是用户模型包含密码和其他重要信息。这被视为安全问题吗?我无处回应有关视图的信息。
由于
修改
我修改了我的代码,但我仍然得到了相关的模型。
$this->set('posts_list',$this->Post->find('all',array('contain' => false, 'order' => array('Post.price ASC'))));
有什么想法吗?
答案 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