gpt4 book ai didi

php - CakePHP 查询调用 COUNT() 两次,原因不明

转载 作者:可可西里 更新时间:2023-11-01 08:20:56 26 4
gpt4 key购买 nike

注意:我最初是在一个小时前问这个问题的,但直到最近才意识到我犯了一个重大的复制和粘贴错误。一个如此重要以至于删除旧帖子并重新开始更容易。对此感到抱歉。

在 CakePHP 框架中,更新模型后,我转储了 SQL 查询。 COUNT(*) 被调用两次,原因不明。

所以我有两个模型,$Foo$Bar。为了简单起见,我没有定义它们之间的任何$belongsTo$hasMany 关系。该问题仅涉及 $Foo,但以防万一我也包含了 $Bar 的代码。

$data = array(
'something' => 12,
'something_else' => $this->Bar->field('id', $conditions),
);

$this->Foo->id = $this->Foo->field($data);
$this->Foo->save($data);

我根据一组条件(此处不相关)获取 $Bar.id 字段。我使用该 id 来确定应该插入或更新到 $Foo 中的 $data。如果 $Foo 的 id 满足 $data 的要求,则该值将被返回;如果不是 false 将被返回。根据 CakePHP 的架构,save() 将在存在有效 id 时进行更新;否则它将插入。我很确定我没有做任何不寻常的事情。

这是我在 SQL 转储中看到的内容:

SELECT `Foo`.`id` FROM `foos` AS `Foo` WHERE `something` = 12 AND `something_else` = 1 LIMIT 1
SELECT COUNT(*) AS `count` FROM `foos` AS `Foo` WHERE `Foo`.`id` = 1
SELECT COUNT(*) AS `count` FROM `foos` AS `Foo` WHERE `Foo`.`id` = 1
UPDATE `foos` SET `something` = 12, something_else` = 1 WHERE `foos`.`id` = 1'

对于我的生活,我根本无法弄清楚为什么需要 COUNT() ,更不用说为什么它被调用两次了。有谁知道发生了什么事?感谢您的帮助。

最佳答案

我没有使用过 CakePHP,但查看了源代码 here ,您会在字段函数中看到它调用了 find 方法。

因此,这个调用

$data = array(
'something' => 12,
'something_else' => $this->Bar->field('id', $conditions),
);

生成:

SELECT `Foo`.`id` FROM `foos` AS `Foo` WHERE `something` = 12 AND `something_else` = 1     LIMIT 1

然后set字段调用

$this->Foo->id = $this->Foo->field($data);

通过内部查找函数调用生成:

SELECT COUNT(*) AS `count` FROM `foos` AS `Foo` WHERE `Foo`.`id` = 1

Save 函数在保存之前还会调用 find 来查看记录是否存在,这会产生第二次调用:

SELECT COUNT(*) AS `count` FROM `foos` AS `Foo` WHERE `Foo`.`id` = 1

最后的查询显然是保存本身。

请自己检查以验证我是否正确阅读了它,但这就是它看起来所做的。

关于php - CakePHP 查询调用 COUNT() 两次,原因不明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129947/

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