使用Doctrine2从字符串插入日期

时间:2011-11-29 20:53:13

标签: php mysql date insert doctrine-orm

简短版本:

有没有人知道如何使用Doctrine2进行简单的日期插入?我需要以YYYY-MM-DD格式('Y-m-d')将日期插入MySQL'日期'字段。

如果你已经知道如何做到这一点,你可以跳过下面我到目前为止尝试过的解释。否则,关于我的问题的更多细节将在休息之后进行。


长版:

我有一个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”中的非对象上调用成员函数格式()。

接下来我尝试改变这样的setter:

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

但这也不起作用:“调用私有Doctrine \ DBAL \ Types \ Type :: __ construct()......”

最后我尝试创建一个简单的Date对象来插入:

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

这给了我这个错误:在Path \ To \ Entity \ Item.php中找不到“类'日期'......”

我也尝试了上面的版本没有Date的反斜杠,这给了我这个错误:“警告:require(Path \ Entity \ Date.php)无法打开流。在Path \ Doctrine \中没有这样的文件或目录COMMON \ ClassLoader.php ......“

(为了确认,我的包含路径在php.ini中正确配置 - 特别是include.path \php\PEAR,这是Date.php所在的位置。)

Doctrine手册中有一个关于使用DateTime实例的explanation,但我不需要存储时间,只需将日期存储为YYYY-MM-DD。

这似乎是一个非常常见的问题 - 有人看到我做错了什么和/或知道如何在Doctrine2中插入日期?

2 个答案:

答案 0 :(得分:8)

您过分关注数据库。只需创建DateTime实例并将其作为值分配给类型为DateTime的对象属性。

数据库将按照您的定义存储它,所以不用担心。

如果您将其格式化为YYYY-MM-DD格式化的字符串值,您会看到它存储了。

Doctrine是从具体数据库中抽象出来的,因此在使用它时不要过多担心数据库。

答案 1 :(得分:2)

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

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