0

MySQL テーブルの列は「updated_at」と呼ばれます。null ではなく、datetime 型です。Doctine タイプも datetime です。

CREATE TABLE `example` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Some\Bundle\Entity\Example:
    type:            entity
    table:           examples
    fields:
        id:
            id:     true
            type:   integer
            generator:
                strategy: IDENTITY
        ...
        createdAt:
            type:   datetime
            column: created_at
        updatedAt:
            type:   datetime
            column: updated_at

$e = new Example;
$e->setCreatedAt(new \DateTime);
$em->persist($e);
/* after this I need $e->updatedAt to be MySQL's default 0 (0000-00-00) */
$em->flush();
/* but it will throw 
"Integrity constraint violation: 1048 Column 'updated_at' cannot be null" 
if I won't set it in Example::__contruct() 
which I don't see any reason to do 
apart from complying with Doctrine shortcomings. */

作成後にエンティティが更新されていない場合、この列に値を入れたくありません。

MySQL または Doctrine のタイプを変更せずに、この列をスキップするか、永続化時に適切な値を設定する方法は?

4

2 に答える 2