Доктрина продолжает обновлять DATETIME при обновлении CURRENT_TIMESTAMP - PullRequest
0 голосов
/ 22 октября 2018

У меня есть класс родительского объекта:

namespace App\Model\Entities;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\MappedSuperclass
 */
abstract class ParentEntity
{
    /**
     * @var int|null
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue
     */
    protected $id;    

    /**
     * @ORM\Column(type="datetime", columnDefinition="DATETIME on update CURRENT_TIMESTAMP")
     */
    protected $modifiedOn;
}

, и каждый раз, когда я запускаю php bin/console o:s:u --dump-sql или --force, консоль выводит, что X-запросы будут выполняться, и каждый запрос предназначен для столбца modified_on.

 ALTER TABLE contact CHANGE modified_on modified_on DATETIME on update CURRENT_TIMESTAMP;
 ALTER TABLE about_us CHANGE modified_on modified_on DATETIME on update CURRENT_TIMESTAMP;
 ALTER TABLE image CHANGE modified_on modified_on DATETIME on update CURRENT_TIMESTAMP;
 ...

В базе данных MySQL все настроено правильно:

CREATE TABLE `about_us` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`modified_on` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Итак, мой вопрос: почему это происходит?Я пропустил некоторые настройки / аннотации для Doctrine?Или вам нужно указать этот атрибут другим способом?

1 Ответ

0 голосов
/ 23 октября 2018

Вы, вероятно, после обратных вызовов жизненного цикла .если так, то это путь:

namespace App\Model\Entities;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\MappedSuperclass
 * @ORM\HasLifecycleCallbacks
 */
abstract class ParentEntity
{
    /**
     * @var int|null
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue
     */
    protected $id;    

    /**
     * @ORM\Column(type="datetime")
     */
    protected $modifiedOn;

    /**
     * @ORM\PreUpdate
     */
    public function setModifiedOn()
    {
        $this->modifiedOn = new \DateTime();
    }
}
...