gpt4 book ai didi

postgresql - 如何使用将表作为 CakePHP 3 模型返回的 PostgreSQL 函数?

转载 作者:行者123 更新时间:2023-11-29 13:19:04 24 4
gpt4 key购买 nike

使用 Cake PHP 3.x 和 PostgreSQL 9.6.3 数据库。

我们广泛使用返回表的 PG 函数 - 例如

select * from getStudies(cid,UID, SID);

函数用于各种应用程序 - 其中之一是从表中过滤更复杂的行 - Cake 在这方面有困难。

一种选择是在 PHP 中将逻辑实现为自定义 Cake Model 方法,但 SQL 代码和连接数量使其在 PHP 中变得困惑。

我们认为我们应该能够从该函数创建一个 Cake 模型,然后通过 Cake 模型方法传递参数,但到目前为止 - 尚不清楚如何做到这一点。

此代码有效,但它返回的数据没有列,我无法弄清楚如何使用反射从模型架构中获取 _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 并将其与查询结果合并

谢谢

最佳答案

正如您在评论中提到的,可以通过其 columns() 方法访问架构列的详细信息。您可以使用架构信息手动处理结果,或使用函数作为源,就像您的示例一样。

查询生成器 from() 方法支持原始 SQL 和表达式,因此您基本上可以添加任何您喜欢的内容,但是表达式将被括在括号中,这将是无效的 SQL函数调用,因此您必须使用原始 SQL 和绑定(bind)(请永远不要直接将(用户)数据注入(inject)查询):

public function getStudies($customerId)
{
return $this
->find()
->from([
$this->alias() => 'getStudies(:customerId)'
])
->bind(':customerId', $customerId, 'integer');
}

这应该生成类似于

的查询
SELECT
Alias.column1, Alias.column2, ...
FROM
getStudies(:customerId) Alias

关于postgresql - 如何使用将表作为 CakePHP 3 模型返回的 PostgreSQL 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44947271/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com