gpt4 book ai didi

php - 使用 Propel 重置 MySQL 日期时间值

转载 作者:行者123 更新时间:2023-11-29 01:59:38 25 4
gpt4 key购买 nike

我想使用 Propel 在 MySql 日期时间列中将记录的日期时间值重置为其默认值 0000-00-00 00:00:00。这就是我尝试过的方式。

$zeroDate = new DateTime();
$zeroDate->setDate(0, 0, 0);
$zeroDate->setTime(0, 0, 0);
$changedRow = BookQuery::create()->findPk($bookId)->setPublishedAt($zeroDate);
if($changedRow->isModified()) {
try {
$changedRow->save();
} catch (Exception $exc) {
$this->logger->debug(__METHOD__ . " " . $exc->getMessage());
}
}

这个我也试过

$changedRow = BookQuery::create()->findPk($bookId)->setPublishedAt("0000-00-00 00:00:00");
if($changedRow->isModified()) {
try {
$changedRow->save();
} catch (Exception $exc) {
$this->logger->debug(__METHOD__ . " " . $exc->getMessage());
}
}

两种变体都会产生错误

Unable to execute UPDATE statement [...]: Invalid datetime format: 1292 Incorrect datetime value: '-0001-11-30 00:00:00' for column 'published_at' at row 1]

因为 Propel 试图插入负的日期时间值。如何使用 Propel 正确重置这些字段?

最佳答案

当您在 Propel 中设置日期字段时,它会转到 PropelDateTime,它基本上是一个 DateTime 对象。

您的代码将生成 a false date ,因为 0000-00-00 00:00:00 不是有效日期:

<?php

$zeroDate = new DateTime();
$zeroDate->setDate(0, 0, 0);
$zeroDate->setTime(0, 0, 0);

var_dump($zeroDate);

// object(DateTime)#1 (3) { ["date"]=> string(20) "-0001-11-30 00:00:00" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" }

您可以将 Propel 中的日期设置为无效日期。

为什么要将日期设置为 0000-00-00 00:00:00?为什么不是 null

关于php - 使用 Propel 重置 MySQL 日期时间值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18512359/

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