由於某些原因,我需要有TIMESTAMP
字段的表。Doctrine2 - 類型時間戳 - 默認值
我創建了我自己的時間戳類型(Doctrine\DBAL\Types\Type
),它工作正常。
但是當我嘗試更新我的數據庫結構時,我得到了這個。
命令行
ede80:~>php app/console doctrine:schema:update --force --complete
Updating database schema...
[Doctrine\DBAL\Exception\DriverException]
An exception occurred while executing 'ALTER TABLE MY_TABLE CHANGE DATE_CREATION DATE_CREATION timestamp DEFAULT NULL'
SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'DATE_CREATION'
SQL查詢
如果我在數據庫上執行下面的查詢,我的作品:
ALTER TABLE MY_TABLE CHANGE DATE_CREATION DATE_CREATION timestamp DEFAULT CURRENT_TIMESTAMP
ORM.YML
但是,當我試圖改變它在MyTable.orm.yml
,就像這樣:
dateCreation:
type: timestamp
nullable: true
column: DATE_CREATION
options:
default: CURRENT_TIMESTAMP
所執行的查詢是
ALTER TABLE MY_TABLE CHANGE DATE_CREATION DATE_CREATION timestamp DEFAULT 'CURRENT_TIMESTAMP'
而失敗。
如何設置一個工作默認值,以便我的數據庫結構可以是最新的? 我已經嘗試設置options: default
到0
,NULL
,CURRENT_TIMESTAMP
,00:00:01
...
PHP 5.3.3 MySQL的63年5月1日
這裏是timestamp類型
我認爲轉換*()並不好。
<?php
namespace CNAMTS\PHPK\CoreBundle\Doctrine\Type;
use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Platforms\AbstractPlatform;
/**
*/
class Timestamp extends Type
{
const TIMESTAMP = 'timestamp';
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
{
return $platform->getDoctrineTypeMapping('TIMESTAMP');
}
public function convertToPHPValue($value, AbstractPlatform $platform)
{
return ($value === null) ? 0 : new \DateTime($value);
}
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
return ($value === null) ? 0 : $value->format(\DateTime::W3C);
}
public function getName()
{
return self::TIMESTAMP;
}
}
爲什麼你不想使用DATETIME類型? http://stackoverflow.com/questions/409286/datetime-vs-timestamp –
我已經讀過這個頁面,但是我不能,這是我工作的一個標準,不幸的是......我知道,這很愚蠢。 – Ulti
你可以嘗試將你的屬性定義爲Doctrine的'datetime'類型,也許它會工作,因爲在PostgreSQL中'datetime'被解釋爲'TIMESTAMP'。 –