0

我有两张桌子:usersposts。我正在尝试选择至少有一篇帖子的任何用户。

我猜这需要连接或子选择。CakePHP 中有什么东西可以让这件事变得简单吗?

4

2 回答 2

1

使用计数器缓存,请参阅http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#belongsto

counterCache:如果设置为 true,则每当您执行 save() 或 delete() 时,关联的模型将自动增加或减少外部表中的“[singular_model_name]_count”字段。如果它是一个字符串,那么它就是要使用的字段名称。计数器字段中的值表示相关行数。您还可以使用数组指定多个计数器缓存,其中键是字段名称,值是条件。例如:

array( 'recipes_count' => true, 'recipes_published' => array('Recipe.published' => 1) ) counterScope:用于更新计数器缓存字段的可选条件数组。

在这种情况下不需要额外的查询。如果您添加/删除帖子,它将自动进入并减少用户表中的计数。

例子:

public $belongsTo = array(
    'User' => array(
        'foreignKey' => 'user_id',
        'counterCache' => true,
        'counterScope' => array(
            'published' => 1)));
于 2012-09-28T00:08:00.367 回答
1

这应该选择所有发表过 1 个或更多帖子的用户

SELECT * FROM `users` as u
INNER JOIN `posts` as p ON p.user_id = u.id

在蛋糕中,您应该能够执行以下操作:

$this->User->find('all', array('joins' =>
    array(
        'table' => 'posts',
        'alias' => 'p',
        'type' => 'inner',
        'conditions' => array(
            'User.id = p.user_id'
        )
    )
);

[编辑]

也许你可以添加

'group' => 'User.id'

或者

'fields' => 'DISTINCT User.id, ...'

删除重复条目

于 2012-09-28T00:02:34.447 回答