Avoiding redundant find() calls when building model methods
Consider that I have a model Foo that has methods doSomething and doAnotherThing that do something useful. These methods need data from the database, so they use $this->find. But they also need to call another method, isOk, to do some verification on the record first:
class Foo extends AppModel {
function isOk($id) {
$data = $this->find('first', array('conditions' => array('Foo.id' => $id)));
if (!$data) return false;
// now use $data and other factors to determine if it's ok and return true or false
}
function doSomething($id) {
if (!$this-> isOk($id)) return false;
$data = $this->find('first', array('conditions' => array('Foo.id' => $id)));
if (!$data) return false;
// now do something with $data
}
function doAnotherThing($id) {
if (!$this-> isOk($id)) return false;
$data = $this->find('first', array('conditions' => array('Foo.id' => $id)));
if (!$data) return false;
// now do something else with $data
}
}
Regardless whether I call doSomething or doAnotherThing, essentially the same find command is run twice; this seems wasteful. How should I structure this so that the data is not fetched a second time?
Or does some manner of CakePHP caching make this a non-issue? (Is there query results caching?)
I am not yet using Containable, though I believe I probably should be. I wonder if that will make it a non-issue as well; the fields necessary to determine if the record isOk might be different than those needed to doSomething.
All three of the above methods will potentially be called from controllers and shell scripts, so I would dislike to change the signature of isOk so that it accepts a $data array; it seems most logical that all three would accept an $id as their argument, but I don't know how people typically do this.
--
Our newest site for the community: CakePHP Video Tutorials http://tv.cakephp.org
Check out the new CakePHP Questions site http://ask.cakephp.org and help others with their CakePHP related questions.
To unsubscribe from this group, send email to
cake-php+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home