我正在嘗試爲我的Symfony項目創建一個timestamp
數據庫字段類型。 我已經創建了以下數據庫類型:Symfony主義時間戳字段
class TimestampType extends Type {
const TIMESTAMP_TYPE_NAME = 'timestamp';
/**
* Gets the SQL declaration snippet for a field of this type.
*
* @param array $fieldDeclaration The field declaration.
* @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform The currently used database platform.
*
* @return string
*/
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
{
return "TIMESTAMP";
}
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
return $value;
}
public function convertToPHPValue($value, AbstractPlatform $platform)
{
return $value;
}
/**
* Gets the name of this type.
*
* @return string
*
* @todo Needed?
*/
public function getName()
{
return self::TIMESTAMP_TYPE_NAME;
}
}
在我的實體,我已經宣佈了以下屬性:
/**
* @var \DateTime
* @ORM\Column(name="created", type="timestamp", options={"default":"CURRENT_TIMESTAMP"})
*/
protected $created = null;
這一切看起來不錯,但在運行數據庫更新時,我得到一個錯誤:
An exception occurred while executing 'ALTER TABLE question CHANGE created created TIMESTAMP DEFAULT 'CURRENT_TIMESTAMP' NOT NULL COMMENT '(DC2Type:timestamp)'':
SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'created'
出於某種原因,我的默認值被封裝在單引號中。這不會發生datetime
字段,但然後我得到一個錯誤,默認值是無效的。
有沒有什麼辦法可以讓Symfony接受一個timetamp
字段,CURRENT_TIMESTAMP
作爲默認值?
我試着在我的自定義類型下面,通過註釋掉追加查詢的Symfony補充說:
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
{
return "TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '(DC2Type:" . self::TIMESTAMP_TYPE_NAME . ")' #--";
}
這樣的作品,但現在的Symfony始終認爲它需要更新我的表並運行查詢每個表,它認爲它需要更新。
我的目標是在數據庫中有一個時間戳,如果我運行本地插入查詢。我知道這可以使用HasLifecycleCallbacks
完成,我已經配置了它們,但我想在某些點避免ORM並使用本機查詢。
任何幫助,將不勝感激。 :)