Cakephp 2如何对模型进行分页,但将结果限制为只有那些具有条件关联模型的结果

dxxyhpgq  于 2022-11-11  发布在  PHP
关注(0)|答案(1)|浏览(137)

我正在一个遗留的Cakephp 2系统上工作,在弄清楚分页应该如何工作时遇到了一些问题。
我有一个Users模型,一个SystemSessions模型和一个Locations模型。Users hasmany SystemSessions和每个SystemSession都有一个location_id。我正在尝试找出如何对Users分页,以便只显示具有特定location_idUsers
如果我尝试:

$conditions['conditions']['User.role'] = 'User';
$conditions['contain'] = array(
    'SystemSession' => array(
        'conditions' => array(
            'SystemSession.location_id' => '34'
        )
    )
);

这将拉回每个User,在这些用户下,将有location_id为34的SystemSessions,但是,没有来自该位置的SystemSessionsUsers也出现在结果中(只是SystemSessions数组为空)。
我想要的是只从那个位置拉回拥有SystemSessionsUsers,从那个特定位置没有得到SystemSessionsUsers,不应该出现在结果中。
通常,我可以循环遍历并删除不需要的结果,但因为我试图对结果分页,这将取消所有分页等操作。
有谁能给予我点建议吗?

s2j5cfk0

s2j5cfk01#

您必须复制您在SQL级别上所做的来解决这个问题,例如,使用连接来拉入并过滤关联数据。您不能单独使用contain来解决这个问题,因为hasMany关联是在单独的查询中检索的,因此您的条件只影响关联数据。
假设$conditions是您的查找器选项:

// ...
$conditions['joins'] = array(
    array(
        'table' => 'system_sessions',
        'alias' => 'SystemSession',
        'type' => 'INNER',
        'conditions' => array(
            'SystemSession.user_id = User.id',
            'SystemSession.location_id' => 34,
        )
    )
);
$conditions['group'] = 'User.id';

这将在system_sessions表上应用一个INNER连接,并满足您所需的条件,例如:

// ...
INNER JOIN
    system_sessions SystemSession ON 
        SystemSession.user_id = User.id AND
        SystemSession.location_id = 34
GROUP BY
    User.id

从而过滤掉不存在匹配的所有用户。
另请参阅

*说明书〉模型〉关联:将模型链接在一起〉连接表

相关问题