在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语句...
每Array
(
[0] => Array
(
[0] => 2
[1] => MyFirstName
[2] => 12345
)
)
,您应该使用the documentation。此输出与Cake 2中的输出并不完全相同,但至少存在字段名称。