(底部更新)
我试图在我的表中获取名为“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.ini 中输出“允许的内存大小已耗尽”错误。知道为什么吗?在 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 工作台工作得很好而且很快。
关于我做错了什么的任何想法?
我试过的
将代码更新为:
public function getLatestVersion() {
return $this
->orderById('desc')
->findOne();
}
仍然得到相同的内存分配错误。
将代码更新为:
$lastVersion = VersionHistoryQuery::create()
->orderById('desc')
->findOne();
删除了自定义函数,打开推进调试模式,它输出这个查询运行:
[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 [] []
仍然遇到内存溢出。