使用Doctrine2从字符串插入日期

can*_*era 2 php mysql date insert doctrine-orm

精简版:

有谁知道如何使用Doctrine2进行简单的日期插入?我需要将格式为YYYY-MM-DD('Ym-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);
Run Code Online (Sandbox Code Playgroud)

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

public function setCreated($date) {
    $this->created = $date;
}
Run Code Online (Sandbox Code Playgroud)

但是,这给了我这个错误信息:"调用一个成员函数的格式()在...学说\ DBAL \类型\ DateType.php一个非对象".

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

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

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

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

public function setCreated($date) {
    $this->created = new \Date($date);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

这里有一个解释的教义手册有关使用日期时间情况下工作,但我并不需要存储的时候,只是日期YYYY-MM-DD.

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

hak*_*kre 8

你太关心你的数据库了.只需创建DateTime实例并将其作为值分配给类型的对象属性DateTime.

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

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

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