gpt4 book ai didi

php - Propel2 自定义查询耗尽了允许的内存大小

转载 作者:可可西里 更新时间:2023-11-01 08:27:59 25 4
gpt4 key购买 nike

(底部更新)

我正在尝试获取名为“VersionHistory”的表中的最新条目,并且由于 ID 设置为自动递增,因此我试图获取最大 ID。尽量避免按降序对整个表进行排序并取顶,因为我想随着表的增长最小化此查询所需的计算,并且该表可能会很快变得非常大。

class VersionHistoryQuery extends BaseVersionHistoryQuery {
public function getLatestVersion() {
return $this
->withColumn('MAX(version_history.id)')
->limit(1);
}
}

我在我的 VersionHistory 构造函数中调用函数,如下所示:

class VersionHistory extends BaseVersionHistory {
public function __construct($backupPath = "") {
$lastVersion = VersionHistoryQuery::create()
->getLatestVersion()
->find();
$lastVersion->setBackupPath("backup/" . $backupPath);
$lastVersion->save();
parent::setImportedAt(date("Y-m-d H:i:s"));
}
}

这会在 php 中输出“允许的内存大小耗尽”错误。知道为什么吗?在 VersionHistory 构造函数中注释掉查询可以修复错误,因此它位于查询中的某个位置。我尝试按照此处的说明设置自定义查询:http://propelorm.org/documentation/03-basic-crud.html#using-custom-sql .但我无法让它发挥作用。运行:

SELECT * FROM version_history WHERE id = (SELECT MAX(id) FROM version_history)

从 MySQL workbench 可以很好地快速运行。

对我做错了什么有什么想法吗?

我尝试了什么

将代码更新为:

    public function getLatestVersion() {
return $this
->orderById('desc')
->findOne();
}

仍然得到相同的内存分配错误。


将代码更新为:

        $lastVersion = VersionHistoryQuery::create()
->orderById('desc')
->findOne();

去掉了自定义函数,开启了propel debug模式,输出运行了这个查询:

[2015-10-11 17:26:54] shop_reporting_db.INFO: SELECT `version_history`.`id`, `version_history`.`imported_at`, `version_history`.`backup_path` FROM `version_history` ORDER BY `version_history`.`id` DESC LIMIT 1 [] []

仍然遇到内存溢出。

最佳答案

就是这样

SELECT * FROM version_history ORDER BY id DESC LIMIT 1;

关于php - Propel2 自定义查询耗尽了允许的内存大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33069790/

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