After a few times adding Containable Behavior to my various model classes, I have a good mind to simply chuck the line into AppModel instead and thus make every model Containable. Which then makes me wonder, is there any situation where it is not desirable or counterproductive for a particular model to have Containable Behavior?
相关问题
- How to validate single field of a model in cakephp
- Testing redirections CakePHP 2.0
- CakePHP 2.x warning SplFileInfo due to cakeshell
- Getting 'unable to write' errors in CakePH
- CakePHP 2.0 Auth Login not working
相关文章
- CakePHP 3.0 Flash Message
- Cake PHP 2.4.x. AuthComponent login() always retur
- Changing password with CakePHP and blowfish
- Localizing timeAgoInWords in CakePHP
- Migrating from Cake 1.3 to 2.0 and beyond - migrat
- In View(CakePHP), the proper way to get current co
- cakephp plugin model/controller cache issue with m
- Instantiating a vendor class in class constructor
Containable can be dangerous b/c Cake acts in an extremely inefficient manner in order to get the nested results.
This site explains it well...
http://www.endyourif.com/cakephp-containable-statement-pitfalls/
Basically though the nice array you are getting back is the results of many different queries while your best performance may come from using a single query with joins.
The convenience of containable is undeniable though.
I would say too few to be worried about. I put containable in App Model:
Containable overrides recursive anyway, so you don't really need to set recursive to -1, but I do just for clarity. Always using containable forces you into the best practice of always using only what you want/need. For small apps, it's not the end of the world to just use recursive and ignore containable, but it's still not best practice.
So, I guess the only argument for using recursive instead of containable would be that in small apps, you save yourself a tiny amount development time, and it won't really noticeably affect performance. I'd definitely go with using containable by default, and removing it where you deem it overkill, rather than the other way around.