简体   繁体   中英

Retrieving models without getting associated models - CakePHP

I use the find('all') function to retrieve the post records from my database, but this will also return all the User information that is associated with the Post model with a belongsTo - hasMany relationship.

The downside of this is that the user model contains password and other important information. Is this considered a security issue? I am nowhere echo-ing the information on the view.

Thanks


EDIT:

I modified my code but I am still getting the associated models.

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

Any ideas?

You have several options. You can set the recursive property on a model:

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

Alterantively, you can specify recursive as an option to your search:

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

You can also use the Containable behaviour in your Post model. In that case you can specify an empty set:

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

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

Or, specified in the query:

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

The upside for the Containable behaviour is when you later on associate other models with your post. Suppose that you implement a Tag model. Now you want to find a post with it's tags, but not the use model:

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

Not necessarily.

But you are retrieving information when you don't need it. It's not a problem now, but keep in mind this becomes a huge problem when you have a lot of associated data

Consider setting your recursive attribute to -1 (or 0 if needed)

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

This will pull data only from the selected model

Or for more fine tuned selection, you can use the Containable behavior : http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html

This allows you to select which associations to keep when retrieving data.

just so you know

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

Do u use this:

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

OR,

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM