1

我有一个这样的查询:

SELECT * FROM posts WHERE owner_id IN (SELECT owner_id FROM owners_list WHERE user_id = 1) ORDER BY modified DESC

什么是等效的最有效的 Cake find 调用?谢谢!

4

2 回答 2

0

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,因为它不太容易出错,而且我不必担心清理/转义。一旦你掌握了连接的窍门,你会发现自己更频繁地使用它们。

于 2012-04-11T21:43:28.890 回答
0

你可以在两个发现中做到这一点。我假设您的 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
    ));
于 2012-04-12T17:46:40.063 回答