我有两个表:users
和posts
。我正在尝试选择至少有一个帖子的用户。
我猜这需要连接或子选择。 CakePHP中有什么东西能让这个变得简单吗?
答案 0 :(得分: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, ...'
删除重复条目
答案 1 :(得分:1)
使用计数器缓存,请参阅http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#belongsto
counterCache:如果设置为true,则关联的模型将自动进行 增加或减少“[singular_model_name] _count”字段 执行save()或delete()时的外表。如果它是一个字符串 那么它就是要使用的字段名称。计数器字段中的值 表示相关行的数量。您还可以指定多个 计数器缓存使用一个数组,其中键是字段名称和值 是条件。 E.g:
阵列( 'recipes_count'=>真正, 'recipes_published'=> array('Recipe.published'=> 1))counterScope:用于更新计数器的可选条件数组 缓存字段。
在这种情况下无需其他查询。如果添加/删除帖子,它将自动进入和减少用户表中的计数。
示例:
public $belongsTo = array(
'User' => array(
'foreignKey' => 'user_id',
'counterCache' => true,
'counterScope' => array(
'published' => 1)));