【发布时间】:2017-07-06 23:46:43
【问题描述】:
使用 Cake PHP 3.x,我们有一个 PostgreSQL 9.6.3 数据库。
我们广泛使用返回表格的 PG 函数 - 例如
select * from getStudies(cid,UID, SID);
函数用于各种应用程序 - 其中之一是从表中过滤更复杂的行 - Cake 有困难。
一种选择是在 PHP 中将逻辑实现为自定义 Cake Model 方法,但 SQL 代码和连接数量使其在 PHP 中变得混乱。
我们认为我们应该能够从该函数创建一个 Cake Model,然后通过 Cake Model 方法传递参数,但到目前为止 - 尚不清楚如何做到这一点。
此代码有效,但它返回没有列的数据,我无法弄清楚如何使用反射从模型架构中获取 _columns 属性。
public function getStudies($data = array()) {
$customer_id = $data['customer_id'];
$connection = ConnectionManager::get('default');
$sql = "select * from getStudies($customer_id)";
$results = $stmt->fetch();
return $results; }
所以—— 选项 1 - 弄清楚如何对将表格返回为蛋糕模型的函数进行建模
选项 2 - 使用反射获取 _columns 并将其与查询结果合并
谢谢
【问题讨论】:
-
是否有一个实际的表,其中包含
getStudies()返回的列,或者这是部分甚至是纯虚拟的?即,模型是否能够内省实际存在的模式?还有cid、UID和SID参数从何而来(即它们在应用程序级别定义的位置)? -
getStudies 返回一个实际的表(或逻辑视图)——与公共函数相同的蛋糕模型。参数从 Controller 函数传递给 Model 函数,如下所示: $v = $this->Studies->getStudies( ['customer_id' => 69]);
-
与此同时 - 我想出了如何在 Cake 3.x 模型中从表模式中获取列: $studies = TableRegistry::get('Vstudies'); $columns = $studies->schema()->columns();无证但有效
-
它应该记录在 API 文档中,使用起来很安全 ;-)
标签: postgresql cakephp