Symfony 如何仅在第一次创建记录时将datetime插入“created”列 我需要一个解决方案,仅当 记录是第一次创建的

Symfony 如何仅在第一次创建记录时将datetime插入“created”列 我需要一个解决方案,仅当 记录是第一次创建的,symfony,orm,doctrine-orm,Symfony,Orm,Doctrine Orm,我发现了这个示例,但它适用于onUpdate样式,因此每次更新记录时,它都会更新updated列 /** * @var datetime $updated * * @ORM\Column(type="datetime") */ protected $updated; /** * @ORM\PrePersist */ public function setUpdatedPrePersist() { $this->updated = date('Y-m-d H:i:s'

我发现了这个示例,但它适用于
onUpdate
样式,因此每次更新记录时,它都会更新
updated

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

/**
 * @ORM\PrePersist
 */
public function setUpdatedPrePersist()
{
    $this->updated = date('Y-m-d H:i:s');
}

一个简单而可靠的解决方案是在composer中需要以下扩展:

然后更新实体,只需添加以下内容:

<?php
// src/YourCompany/YourBundle/Entity/Demo.php

namespace YourCompany\YourBundle\Entity;

use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Demo
{
    // ....
    /**
     * @var datetime $created
     *
     * @Gedmo\Timestampable(on="create")
     * @ORM\Column(type="datetime")
     */
    private $created;

    /**
     * @var datetime $updated
     *
     * @Gedmo\Timestampable(on="update")
     * @ORM\Column(type="datetime")
     */
    private $updated;

}
如果你不喜欢站在巨人的肩膀上:

<?php
// src/YourCompany/YourBundle/Entity/Demo.php

namespace YourCompany\YourBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 */
class Demo
{

    // ...

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

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


    /**
     * @ORM\PrePersist
     */
    public function onPrePersist()
    {
        $this->created = new \DateTime();
        $this->updated = new \DateTime();
    }

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

    // ...

}

一个简单而可靠的解决方案是在composer中需要以下扩展:

然后更新实体,只需添加以下内容:

<?php
// src/YourCompany/YourBundle/Entity/Demo.php

namespace YourCompany\YourBundle\Entity;

use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Demo
{
    // ....
    /**
     * @var datetime $created
     *
     * @Gedmo\Timestampable(on="create")
     * @ORM\Column(type="datetime")
     */
    private $created;

    /**
     * @var datetime $updated
     *
     * @Gedmo\Timestampable(on="update")
     * @ORM\Column(type="datetime")
     */
    private $updated;

}
如果你不喜欢站在巨人的肩膀上:

<?php
// src/YourCompany/YourBundle/Entity/Demo.php

namespace YourCompany\YourBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 */
class Demo
{

    // ...

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

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


    /**
     * @ORM\PrePersist
     */
    public function onPrePersist()
    {
        $this->created = new \DateTime();
        $this->updated = new \DateTime();
    }

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

    // ...

}

一个简单而可靠的解决方案是在composer中需要以下扩展:

然后更新实体,只需添加以下内容:

<?php
// src/YourCompany/YourBundle/Entity/Demo.php

namespace YourCompany\YourBundle\Entity;

use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Demo
{
    // ....
    /**
     * @var datetime $created
     *
     * @Gedmo\Timestampable(on="create")
     * @ORM\Column(type="datetime")
     */
    private $created;

    /**
     * @var datetime $updated
     *
     * @Gedmo\Timestampable(on="update")
     * @ORM\Column(type="datetime")
     */
    private $updated;

}
如果你不喜欢站在巨人的肩膀上:

<?php
// src/YourCompany/YourBundle/Entity/Demo.php

namespace YourCompany\YourBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 */
class Demo
{

    // ...

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

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


    /**
     * @ORM\PrePersist
     */
    public function onPrePersist()
    {
        $this->created = new \DateTime();
        $this->updated = new \DateTime();
    }

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

    // ...

}

一个简单而可靠的解决方案是在composer中需要以下扩展:

然后更新实体,只需添加以下内容:

<?php
// src/YourCompany/YourBundle/Entity/Demo.php

namespace YourCompany\YourBundle\Entity;

use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Demo
{
    // ....
    /**
     * @var datetime $created
     *
     * @Gedmo\Timestampable(on="create")
     * @ORM\Column(type="datetime")
     */
    private $created;

    /**
     * @var datetime $updated
     *
     * @Gedmo\Timestampable(on="update")
     * @ORM\Column(type="datetime")
     */
    private $updated;

}
如果你不喜欢站在巨人的肩膀上:

<?php
// src/YourCompany/YourBundle/Entity/Demo.php

namespace YourCompany\YourBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 */
class Demo
{

    // ...

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

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


    /**
     * @ORM\PrePersist
     */
    public function onPrePersist()
    {
        $this->created = new \DateTime();
        $this->updated = new \DateTime();
    }

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

    // ...

}

这是()我以前发现的与您的类似的东西,但我认为可能会有一个与我类似的例子。我添加了如何在不使用该捆绑包的情况下实现您的要求。尽管我不明白为什么,但该库已被广泛使用和测试作为旁注,您将在那里执行的操作与使用条令扩展所执行的操作基本相同,都会侦听条令事件并更新正确的日期时间字段。不同之处在于,这种方式您必须自己编写方法,如果您使用扩展,您可以将注释放在所有需要可时间戳的实体中,内置侦听器将处理所有事情我之前发现的与您的类似,但我认为可能会有一个与我类似的示例。我添加了如何在不使用该捆绑包的情况下实现您的要求。尽管我不明白为什么,但该库已被广泛使用和测试作为旁注,您将在那里执行的操作与使用条令扩展所执行的操作基本相同,都会侦听条令事件并更新正确的日期时间字段。不同之处在于,这种方式您必须自己编写方法,如果您使用扩展,您可以将注释放在所有需要可时间戳的实体中,内置侦听器将处理所有事情我之前发现的与您的类似,但我认为可能会有一个与我类似的示例。我添加了如何在不使用该捆绑包的情况下实现您的要求。尽管我不明白为什么,但该库已被广泛使用和测试作为旁注,您将在那里执行的操作与使用条令扩展所执行的操作基本相同,都会侦听条令事件并更新正确的日期时间字段。不同之处在于,这种方式您必须自己编写方法,如果您使用扩展,您可以将注释放在所有需要可时间戳的实体中,内置侦听器将处理所有事情我之前发现的与您的类似,但我认为可能会有一个与我类似的示例。我添加了如何在不使用该捆绑包的情况下实现您的要求。尽管我不明白为什么,但该库已被广泛使用和测试作为旁注,您将在那里执行的操作与使用条令扩展所执行的操作基本相同,都会侦听条令事件并更新正确的日期时间字段。不同之处在于,通过这种方式,您必须自己编写方法,如果您使用扩展,您可以将注释放在所有需要可时间标记的实体中,而内置侦听器将处理所有事情。