首页 > 解决方案 > CakePHP 2.4 在单个 Select 查询中为每个事件获取 10 条记录

问题描述

我制作了以下代码来获取每个事件的用户记录,但我只想获取每个事件的前 10 个用户。请指导我如何更新我当前的查询来获得这个:

$registrant = $this->RmrEventsRegistrant->find('all', array('conditions' =>
    array(
        array('RmrEventsRegistrant.event_id' => $event_ids)
   ),
   'fields' => array('RmrEventsRegistrant.id,RmrEventsRegistrant.first_name,RmrEventsRegistrant.last_name,RmrEventsRegistrant.email,RmrEventsRegistrant.event_id'),
   'order' => array('RmrEventsRegistrant.created'),
));

其中 $event_ids 是 event_id 数组。

标签: phpmysqlcakephpcakephp-2.4

解决方案


首先,您需要定义您的 RmrEventsRegistrant 模型和用户模型之间的关系。在您的情况下,关系是事件hasMany用户,它将在您的事件模型中定义如下。

class RmrEventsRegistrant extends AppModel { 
    public $useTable = 'rmr_events_registrant'; 

    public $hasMany = array(
        'User' => array(
            'className' => 'User',
            'limit' => 10,
        )
    );

} 

由于在hasMany关系中您已将limit参数定义为 10,因此您无需对已发布的查询进行任何更改。Cakephp 将为它检索到的每个事件自动获取 10 个用户。

您可能需要更改 hasMany 关联中用户模型的 className,具体取决于您如何定义它。就像您的事件模型被定义为 RmrEventsRegistrant。

您可以在Cookbook中阅读有关关联的更多信息


推荐阅读