我有一个这样的查询:
SELECT * FROM posts WHERE owner_id IN (SELECT owner_id FROM owners_list WHERE user_id = 1) ORDER BY modified DESC
什么是等效的最有效的 Cake find 调用?谢谢!
我有一个这样的查询:
SELECT * FROM posts WHERE owner_id IN (SELECT owner_id FROM owners_list WHERE user_id = 1) ORDER BY modified DESC
什么是等效的最有效的 Cake find 调用?谢谢!
3个选择:
1)Cake 确实处理子查询,尽管它很复杂: http ://book.cakephp.org/2.0/en/models/retrieving-your-data.html#sub-queries
这是一个包含示例的 SO 问题: CakePHP 中的子查询以在其他表中查找
2)使用连接语句: http ://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#joining-tables
3)您可以通过Model::query()按原样使用您的查询,只要您先进行消毒
我更喜欢选项 2,因为它不太容易出错,而且我不必担心清理/转义。一旦你掌握了连接的窍门,你会发现自己更频繁地使用它们。
你可以在两个发现中做到这一点。我假设您的 owner_list 表的模型名称是 OwnersList:
$user_ids = $this->OwnersList->find('list', array(
'fields'=>array('id','id'),
'conditions'=>array(
'OwnersList.user_id'=>1
)
));
$results = $this->Post->find('all',array(
'Post.owner_id'=>$user_ids
));