CakePHP 3.8 / CakePHP 4 vs CakePHP 2中原始SQL查询结果的数组结构

问题描述 投票:0回答:1

在CakePHP 4.0发布之后,我们正在考虑将CakePHP 2.x应用程序迁移到3.8或4.0。当前,我们陷入了这个问题:

我们的应用程序有时使用Model::query()方法使用原始SQL语句。


例如,此CakePHP 2代码:

Model::query()

返回

$sql = "SELECT u.id, u.firstname FROM users u, contacts c WHERE u.id = 2 and c.id = u.contact_id";
$u = $this->User->query($sql);  // Or on any other model...
$this->log($u);

当我们尝试使用CakePHP 3.8做相同的事情时>

Array
(
    [0] => Array
        (
            [u] => Array
                (
                    [id] => 2
                    [firstname] => MyFirstName
                )
            [c] => Array
                (
                    [zip] => 12345
                )

        )
)

结果是

$connection = ConnectionManager::get('default');
$sql = "SELECT u.id, u.firstname FROM users u, contacts c WHERE u.id = 1 and c.id = u.contact_id";
$u = $connection->execute($sql)->fetchAll();
$this->log($u);

为了安全迁移:有没有一种方法可以使CakePHP 3.8 / 4使用与CakePHP 2中相同的数组结构返回查询结果?

重写语句以使用ORM是不可行的。上面的示例不是真实的代码-实际的查询更为复杂。

在CakePHP 4.0发布之后,我们正在考虑将CakePHP 2.x应用程序迁移到3.8或4.0。当前,我们陷入这个问题:我们的应用程序使用原始SQL语句...

cakephp cakephp-3.x cakephp-4.x
1个回答
0
投票

Array ( [0] => Array ( [0] => 2 [1] => MyFirstName [2] => 12345 ) ) ,您应该使用the documentation。此输出与Cake 2中的输出并不完全相同,但至少存在字段名称。

© www.soinside.com 2019 - 2024. All rights reserved.