gpt4 book ai didi

CakePHP 3 - 访问查询对象的参数

转载 作者:行者123 更新时间:2023-12-02 20:27:50 25 4
gpt4 key购买 nike

在 CakePHP 3.x 中我可以这样做:

$Substances = TableRegistry::get('Substances');
$query = $Substances->find()->where($where_conditions)->select(['id']);
debug($query);

这将向我显示查询对象。

如果我想获取 SQL 字符串,我可以使用 debug($query->sql());。这将为我提供带有任何参数占位符的 SQL 字符串,例如

SELECT ... WHERE ... in (:c0,:c1,:c2))

使用 debug($query) 时,我可以看到 :c0:c1 等的值:

'params' => [
':c0' => [
'value' => (int) 47,
'type' => 'smallinteger',
'placeholder' => 'c0'
],
':c1' => [
'value' => (int) 93,
'type' => 'smallinteger',
'placeholder' => 'c1'
],
':c2' => [
'value' => (int) 845,
'type' => 'smallinteger',
'placeholder' => 'c2'
],
':c3' => [
'value' => (int) 354,
'type' => 'smallinteger',
'placeholder' => 'c3'
]
]

但是,我无法在 debug 语句之外访问它们。例如 $query->params()$query['params'] 不给我参数 - 它会出错。我希望能够将此数组传递给自定义函数,那么如何访问它?

这很奇怪,因为我可以使用 debug($query->sql()) 来获取上面的 SQL 字符串,而 params 只是该对象中的另一件事,但似乎无法访问。

我已阅读 How to get params from query object in CakePHP 3但认为这是一个不同的问题,因为它与由于 debug 提供的默认深度而看不到 debug 语句中的值有关。

我想要这样做的原因是因为我希望能够执行 CREATE TABLE AS 查询,将 SELECT 语句的值写入新的表(重要提示:请参阅 this link 以了解其在普通 MySQL 中如何工作的示例)。我不知道如何使用 Cake 中的 ORM 来做到这一点,因此计划编写一个自定义函数。但我需要能够访问 SQL 以及绑定(bind)的参数,以便可以在我自己的函数中执行查询。

如果您知道我可以使用 ORM 执行 CREATE TABLE AS 查询的解决方案,我仍然有兴趣了解这一点。但是我想知道 params 是否也可以在 debug() 外部访问。

最佳答案

前提:我实际上并不明白为什么你需要这些参数

无论如何。您需要的信息由查询 ValueBinder对象存储

所以你可以简单地这样做

$params = $query->getValueBinder()->bindings();
debug($params);

但由于某种原因,这会给你一个空数组。我的猜测是查询首先需要某种初始化。

事实上,如果你运行

debug($query);
$params = $query->getValueBinder()->bindings();
debug($params);

你会看到你的参数。我想会有比我更专业的人来给出完整的解释

编辑:我注意到调试$query调用$query->sql(),而$query->sql()又调用conection->编译查询();

所以你可以这样做

$query->sql(); // you need this to compile the query
// and generate the bindings
$params = $query->getValueBinder()->bindings();

关于CakePHP 3 - 访问查询对象的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49489055/

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