# How skinny should controllers be, how fat should models be in CakePHP?

I know it's a good idea to put all data-related logic in your models in CakePHP, but what would you say about keeping every Model::find() and its particular params in the model? Is this good practice, or just taking things too far?

For example, is this:

PostsController:

function index() {
$posts =$this->Post->getLatest();
$this->set(compact('posts')); }  Post model: function getLatest() {$params = array(
'conditions' => array('published' => 1),
'limit' => 5,
'order' => 'publish_date DESC'
);
return $this->find('all',$params);
}


Better than this:

PostsController:

function index() {
$params = array( 'conditions' => array('published' => 1), 'limit' => 5, 'order' => 'publish_date DESC' );$posts = $this->Post->find('all',$params);
$this->set(compact('posts')); }  Any thoughts? Which is better architecturally? ## 2 Answers It's totally egilable to write shorthand-find functions. This way the controller is not depended of the model's parameters. I tend to go that far, that I don't use any fields directly in my controllers (and thus, not using find in controllers at all). You could save a variable by defining the array in your find-call aswell ;). • Thanks for that. I use the first example I gave (all params in the model) because I feel it scans better and opens more opportunities for model method reuse. I just had a slight nagging doubt that I'm going overboard with it, so I appreciate the feedback. Seeing as nobody else has written otherwise, I reckon it must not be a bad idea. – mtnorthrop May 29 '11 at 19:31 I know this is an old question but i thought i'd share my experience. I recently had an application where i was sick of defining all the Contain associations every time i wanted to get an a record. So i created an Application::getApplication($id); method that included all my Contains and their conditions.

This worked great, every time i wanted an application i just called this. unfortunately when i moved to production and had to deal with a lot more data this became too slow to use in a lot of places. I had to go back and change all the calls to getApplicaion() to usual finds where i could tweak the Contains parameter to only get what i needed.