Published by Rolf on 25 Aug 2009
Simple example of using a subquery in CakePHP
I hunted for awhile but never could find a simple example online showing how to do a subquery. For example suppose you have the usual Posts and Comments models, but for whatever reason could not bind them on the usual “id” foreign keys. So if you wanted to query for all the Posts that have at least 10 Comments, while joining them on some key condition, you’d want to use a subquery like:
SELECT Post.id, Post.title FROM posts Post WHERE Post.id IN (SELECT p.id FROM posts p, comments c WHERE c.col_x = p.col_y AND c.total > 10)
I couldn’t find any sample code for this. After a lot of trial and error I was finally able to do this (using pagination):
1 2 3 4 5 6 | $blocks = $this->paginate( array( 'field1' => 'value1', // etc. '1' => '1 AND Post.id IN (SELECT p.id FROM posts p, comments c WHERE c.col_x = p.col_y AND c.total > 10)' ) ); |
Enjoy.