はじめに
create_date/update_date列に自動で値が入るのはどこでやっているのか
setCreateDate/setUpdateDate
Insert
ここでやっているっぽい。
src/Eccube/Doctrine/EventSubscriber/SaveEventSubscriber.php
/**
* @param LifecycleEventArgs $args
*/
public function prePersist(LifecycleEventArgs $args)
{
$entity = $args->getObject();
if (method_exists($entity, 'setCreateDate')) {
$entity->setCreateDate(new \DateTime());
}
if (method_exists($entity, 'setUpdateDate')) {
$entity->setUpdateDate(new \DateTime());
}
if (method_exists($entity, 'setCurrencyCode')) {
$currency = $this->eccubeConfig->get('currency');
$entity->setCurrencyCode($currency);
}
if (method_exists($entity, 'setCreator')) {
$user = $this->requestContext->getCurrentUser();
if ($user instanceof Member) {
$entity->setCreator($user);
}
}
}
EntityにsetCreateDate()/setUpdateDate()というメソッドがあれば設定されるっぽい。
Update
ここでやっているっぽい。
src/Eccube/Doctrine/EventSubscriber/SaveEventSubscriber.php
/**
* @param LifecycleEventArgs $args
*/
public function preUpdate(LifecycleEventArgs $args)
{
$entity = $args->getObject();
if (method_exists($entity, 'setUpdateDate')) {
$entity->setUpdateDate(new \DateTime());
}
if (method_exists($entity, 'setCreator')) {
$user = $this->requestContext->getCurrentUser();
if ($user instanceof Member) {
$entity->setCreator($user);
}
}
}
EntityにsetUpdateDate()というメソッドがあれば設定されるっぽい。
まとめ
メソッドさえあれば良さ気なので列名は何でも良いのかもしれない。
あとUTCで登録されるようなのでphpMyAdminなどで見ると一瞬-9hで表示されて焦る。
取得時にTimezoneに合わせて変換するようだ。