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