有人能告訴我如何在datetime列上添加默認值嗎?我不能這樣做:學說2.1 - 日期時間列的默認值
protected $registration_date = date("Y-m-d H:i:s", time());
那麼如何?
有人能告訴我如何在datetime列上添加默認值嗎?我不能這樣做:學說2.1 - 日期時間列的默認值
protected $registration_date = date("Y-m-d H:i:s", time());
那麼如何?
你映射你的財產作爲DateTime類型然後設置使用新DateTime實例構造函數中的值:
/**
* @Entity
* @Table(name="...")
*/
class MyEntity
{
/** @Column(type="datetime") */
protected $registration_date;
public function __construct()
{
$this->registration_date = new DateTime();
}
}
這可以作爲一個持久化類的構造函數時水化不叫。
您還可以使用生命週期回調,如果你想成爲非常精確:
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\HasLifecycleCallbacks
* ...
*/
class MyEntity
{
/**
* @ORM\PrePersist
*/
public function onPrePersistSetRegistrationDate()
{
$this->registration_date = new \DateTime();
}
}
我更喜歡這個答案,因爲它更清楚地說明了Doctrine將如何處理它。 –
+1它會將最新日期記錄在記錄中。如果記錄有兩個日期modified_datetime和created_datetime。如果將modified_datetime放入構造函數中,created_time可能會比modified_datetime更新。 –
有關生命週期回調的所有功能的參考:http://doctrine-orm.readthedocs.org/en/latest/reference/events.html#reference-events-lifecycle-events – fyrye
有這個這個自動化的延伸......
https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/timestampable.md
/**
* @var \DateTime
*
* @ORM\Column(name="date_added", type="datetime")
* @Gedmo\Timestampable(on="create")
*/
private $date_added;
/**
* @var \DateTime
*
* @ORM\Column(name="date_modified", type="datetime")
* @Gedmo\Timestampable(on="update")
*/
private $date_modified;
對於默認價值CURRENT_TIMESTAMP:
@ORM\Column(name="created_at", type="datetime", options={"default": 0})
爲我工作...
這應該是現在最好的答案IMO,尤其是如果你想讓表模式本身承擔CURRENT_TIMESTAMP – skrilled
謝謝。這幫了我很多。我已經使用了'options = {「default」:「CURRENT_TIMESTAMP」})'之前一般工作。但是在我的postgres後面,它變成了DEFAULT NOW(),這是postgres的方式。但是然後一個教條:migrations:diff會誤解now()作爲與CURRENT_TIMESTAMP的偏差,並在每次運行它時創建一個diff文件。但是通過這個解決方案原則得到了一切都是同步的。 – luba
偉大的答案和IMO,這是最乾淨的方式。如果它有任何興趣,這被翻譯爲'ADD date_added TIMESTAMP(0)WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL' for me。 – crmpicco
我認爲,實現自動填充爲datetime
最好的辦法就是讓這樣的:
* @ORM\Column(type="datetime", options={"default"="CURRENT_TIMESTAMP"})
把邏輯構造是不正確的解決方案,因爲默認設置值爲SQL客戶端責任。如果您決定不再使用ORM,您將失去業務邏輯。另外,如果使用構造函數,您將無法將默認時間戳添加到屬性現有行。
我投這個答案,因爲它是純PHP解決方案。其他答案可能:1)需要特殊的知識'onPrePersistSetRegistrationDate',它添加'HasLifecycleCallbacks','PrePersist'註解2)我想設置一個默認值需要我添加第三個庫'@Gedmo \ Timestampable'?!! 3)CURRENT_TIMESTAMP有時不好。例如:當你在中國的腳本服務器,但在美國的數據庫服務器。 (原因,這不是很常見,但也有這種情況) – Yarco