Cakephp 如何创建使用子查询的联接?

Cakephp 如何创建使用子查询的联接?,cakephp,join,subquery,query-builder,cakephp-2.x,Cakephp,Join,Subquery,Query Builder,Cakephp 2.x,如何将以下SQL查询转换为CakePhp查找查询 选择 a、 id,a.rev,a.contents 从…起 你的桌子a 内连接 选择 id,MAXrev版本 从…起 你的桌子 分组 身份证件 a.id=b.id和a.rev=b.rev上的b 我尝试了以下代码: return $model->find('all', [ 'fields' => $fields, 'joins' => [ [ 'table' => $m

如何将以下SQL查询转换为CakePhp查找查询

选择 a、 id,a.rev,a.contents 从…起 你的桌子a 内连接 选择 id,MAXrev版本 从…起 你的桌子 分组 身份证件 a.id=b.id和a.rev=b.rev上的b 我尝试了以下代码:

return $model->find('all', [
    'fields' => $fields,
    'joins' => [
        [
            'table' => $model->useTable,
            'fields' => ['id','MAX(rev) as rev'],
            'alias' => 'max_rev_table',
            'type' => 'INNER',
            'group' => ['id'],
            'conditions' => [
                $model->name.'.id= max_rev_table.id',
                $model->name.'.rev = max_rev_table.rev'
            ]
        ]
    ],
    'conditions' => [
        $model->name.'.emp_id' => $empId
    ]
]);
但在生成的SQL中,连接下的字段似乎不包括在内。所以我没有得到maxrev,我只需要得到带有maxrev的行

我尝试重新排列联接中的项,但仍然生成相同的自动生成的SQL

您能帮助我吗?

连接没有字段或组选项,只有表、别名、类型和条件选项

如果要加入子查询,则需要显式生成一个子查询:

$ds = $model->getDataSource();
$subquery = $ds->buildStatement(
    array(
        'fields' => array('MaxRev.id', 'MAX(rev) as rev'),
        'table'  => $ds->fullTableName($model),
        'alias'  => 'MaxRev',
        'group'  => array('MaxRev.id')
    ),
    $model
);
并将其传递到联接表选项:

另见


您使用的是哪个版本的CakePHP?另外,您在模型中正确地声明了关系吗?我想我有v2 CakePHP。我还声明了关系这比使用模型的“query”函数要好吗?@jaypax123如果您指的是构建语句,那么是和否。model::query立即执行查询,而DboSource::buildStatement生成查询字符串,在这种情况下,您无法比较两者。我明白了。我试过你的答案,效果很好。非常感谢您的帮助!:
'table' => "($subquery)"