Symfony2 Timestable特征:"列'createdAt'不能为空"

Dor*_*ian 5 php traits symfony doctrine-orm

我有一个非常标准的实体与正确的导入:

/**
 * Budhaz\aMailerBundle\Entity\Instance
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Instance {
    use TimestampableEntity;

    /** @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */
    private $id;
...
}
Run Code Online (Sandbox Code Playgroud)

但我想从我的表单中删除createdAt(和updatedAt),这样用户就不会设置它们,所以我将它从InstanceForm中删除:

class InstanceType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name')
            ->add('startAt')
            ->add('endAt')
            //->add('createdAt')
            //->add('updatedAt')
            ->add('campaign')
        ;
    }
...
}
Run Code Online (Sandbox Code Playgroud)

但现在我有这个错误:

SQLSTATE [23000]:完整性约束违规:1048列'createdAt'不能为空

createdAt和updatedAt应该由Doctrine自动设置,但它保持为null,任何人都知道为什么?

ins*_*ere 11

您必须手动设置类中的值.然后你可以告诉doctrine在每次更新之前设置新值:

public function __construct() {
    $this->setCreatedAt(new \DateTime());
    $this->setUpdatedAt(new \DateTime());
}

/**
 * @ORM\PreUpdate
 */
public function setUpdatedAtValue() {
    $this->setUpdatedAt(new \DateTime());
}
Run Code Online (Sandbox Code Playgroud)


小智 5

app / config / config.yml

stof_doctrine_extensions:
   orm:
      default:
          timestampable: true
Run Code Online (Sandbox Code Playgroud)

  • 请描述这是做什么的。 (4认同)

lon*_*ong 5

您需要检查捆绑包是否已安装。如果没有,请运行: composer require stof/doctrine-extensions-bundle

它应该创建文件:app/config/packages/stof_doctrine_extensions.yaml内容为:

stof_doctrine_extensions:
    default_locale: en_US
    orm:
        default:
            timestampable: true
Run Code Online (Sandbox Code Playgroud)