使用Doctrine2从字符串中插入日期

3

简短版:

有人知道如何使用Doctrine2进行简单的日期插入吗?我需要将一个格式为YYYY-MM-DD('Y-m-d')的日期插入到MySQL的“date”字段中。


详细版:

我有一个Doctrine2 CRUD应用程序,需要将表单提交的日期插入到MySQL数据库中。

日期是通过三个下拉菜单:年、月和日在表单中提交的。

在我的Doctrine存储库方法中,我使用date()将提交的值转换为日期,然后调用实体类中名为setCreated()的方法:

$string = $values['year'] . '-' . $values['month'] . '-' . $values['day'];
$date = date('Y-m-d', strtotime($string));
$item->setCreated($date);

在setCreated()中,首先我尝试像这样传递日期:

public function setCreated($date) {
    $this->created = $date;
}

但这给我带来了一个错误信息:“在 ...Doctrine\DBAL\Types\DateType.php 中调用非对象成员函数format()”。

接下来,我尝试像这样更改setter:

public function setCreated($date) {
    $this->published = new \Doctrine\DBAL\Types\DateType($date);
}

但这个也不行:"调用私有的Doctrine\DBAL\Types\Type::__construct()..."。
最后我尝试创建一个简单的日期对象来插入:
public function setCreated($date) {
    $this->created = new \Date($date);
}

这给我带来了一个错误:"在Path\To\Entity\Item.php中找不到'日期'类..."。
我还尝试过没有Date前面的反斜杠的那个版本,结果给我带来了这个错误:"警告:在Path\Doctrine\Common\ClassLoader.php文件中,无法打开流,未找到Path\Entity\Date.php文件或目录...”。
(确认一下,我的include路径在php.ini中已经正确配置了——具体来说是include_path \php\PEAR,其中Date.php所在的位置。)
在Doctrine手册中有一个关于使用DateTime实例的解释,但我不需要存储时间,只需要日期,格式为YYYY-MM-DD。
这似乎是一个非常常见的问题——有人能看出我做错了什么和/或知道如何在Doctrine2中插入日期吗?
2个回答

8
你过于关注数据库了。只需创建DateTime实例并将其分配为类型为DateTime的对象属性的值即可。
数据库将按照您定义的方式存储它,因此不用担心。
如果您将其格式化为YYYY-MM-DD格式的字符串值,则会看到它已经存储。
Doctrine是为了抽象出你的具体数据库,因此当你使用它时不要太担心数据库。

确认我所要做的就是将$date传递给一个新的\DateTime实例。我猜我被卡在了不需要存储时间这个事实上。感谢您提供的解决方案,以及关于如何更好地处理与数据库相关的Doctrine的建议。 - cantera

2

只需在您的类中添加一个构造函数(用于设置默认日期)。如果您想设置自己的日期,请修改此代码并像setDateField()方法一样使用它:

public function __construct() {
        $this->date_field = new DateTime(); 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接