symfony对于mysql自动设置时间字段

文章转载自SakuraLJ

mysql字段类型是timestamp自动获取mysql时间,可是symfony不插入该字段报mysql错误,后来发现symfony会自动填充该字段为空

1、在更新entity时自动设置时间字段

<code class="hljs java has-numbering"><?php

namespace Tranz\BMTestBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

<span class="hljs-javadoc">/**
 * TestPage
 *
 *<span class="hljs-javadoctag"> @ORM</span>\Table(name="test_page")
 *<span class="hljs-javadoctag"> @ORM</span>\Entity
 *<span class="hljs-javadoctag"> @ORM</span>\HasLifecycleCallbacks()   //这里引入doctrine生命周期管理的函数
 */</span>
class TestPage
{
    <span class="hljs-javadoc">/**
     *<span class="hljs-javadoctag"> @var</span> \DateTime
     *
     *<span class="hljs-javadoctag"> @ORM</span>\Column(name="created_time", type="datetime", nullable=false)
     */</span>
    <span class="hljs-keyword">private</span> $createdTime = <span class="hljs-string">'CURRENT_TIMESTAMP'</span>;

    <span class="hljs-javadoc">/**
     *<span class="hljs-javadoctag"> @var</span> \DateTime
     *
     *<span class="hljs-javadoctag"> @ORM</span>\Column(name="updated_time", type="datetime", nullable=false)
     */</span>
    <span class="hljs-keyword">private</span> $updatedTime = <span class="hljs-string">'CURRENT_TIMESTAMP'</span>;

    <span class="hljs-javadoc">/**
     *<span class="hljs-javadoctag"> @return</span> \DateTime
     */</span>
    <span class="hljs-keyword">public</span> function <span class="hljs-title">getCreatedTime</span>()
    {
        <span class="hljs-keyword">return</span> $<span class="hljs-keyword">this</span>->createdTime;
    }

    <span class="hljs-javadoc">/**
     *<span class="hljs-javadoctag"> @param</span> \DateTime $createdTime
     */</span>
    <span class="hljs-keyword">public</span> function <span class="hljs-title">setCreatedTime</span>($createdTime)
    {
        $<span class="hljs-keyword">this</span>->createdTime = $createdTime;
    }

    <span class="hljs-javadoc">/**
     *<span class="hljs-javadoctag"> @return</span> \DateTime
     */</span>
    <span class="hljs-keyword">public</span> function <span class="hljs-title">getUpdatedTime</span>()
    {
        <span class="hljs-keyword">return</span> $<span class="hljs-keyword">this</span>->updatedTime;
    }

    <span class="hljs-javadoc">/**
     *<span class="hljs-javadoctag"> @param</span> \DateTime $updatedTime
     */</span>
    <span class="hljs-keyword">public</span> function <span class="hljs-title">setUpdatedTime</span>($updatedTime)
    {
        $<span class="hljs-keyword">this</span>->updatedTime = $updatedTime;
    }

    <span class="hljs-javadoc">/**
     *<span class="hljs-javadoctag"> @ORM</span>\Prepersist   //每次在commit前都会执行这个函数,达到自动更新创建时间和更新时间
     */</span>
    <span class="hljs-keyword">public</span> function <span class="hljs-title">PrePersist</span>(){
        <span class="hljs-keyword">if</span>($<span class="hljs-keyword">this</span>->getCreatedTime()==<span class="hljs-keyword">null</span>){
            $<span class="hljs-keyword">this</span>->setCreatedTime(<span class="hljs-keyword">new</span> \DateTime(<span class="hljs-string">'now'</span>));
        }
        $<span class="hljs-keyword">this</span>->setUpdatedTime(<span class="hljs-keyword">new</span> \DateTime(<span class="hljs-string">'now'</span>));
    }
}
</code>

1、在更新entity时自动设置时间字段

<code class="hljs java has-numbering"><?php

namespace Tranz\BMTestBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

<span class="hljs-javadoc">/**
 * TestPage
 *
 *<span class="hljs-javadoctag"> @ORM</span>\Table(name="test_page")
 *<span class="hljs-javadoctag"> @ORM</span>\Entity
 *<span class="hljs-javadoctag"> @ORM</span>\HasLifecycleCallbacks()   //这里引入doctrine生命周期管理的函数
 */</span>
class TestPage
{
    <span class="hljs-javadoc">/**
     *<span class="hljs-javadoctag"> @var</span> \DateTime
     *
     *<span class="hljs-javadoctag"> @ORM</span>\Column(name="created_time", type="datetime", nullable=false)
     */</span>
    <span class="hljs-keyword">private</span> $createdTime = <span class="hljs-string">'CURRENT_TIMESTAMP'</span>;

    <span class="hljs-javadoc">/**
     *<span class="hljs-javadoctag"> @var</span> \DateTime
     *
     *<span class="hljs-javadoctag"> @ORM</span>\Column(name="updated_time", type="datetime", nullable=false)
     */</span>
    <span class="hljs-keyword">private</span> $updatedTime = <span class="hljs-string">'CURRENT_TIMESTAMP'</span>;

    <span class="hljs-javadoc">/**
     *<span class="hljs-javadoctag"> @return</span> \DateTime
     */</span>
    <span class="hljs-keyword">public</span> function <span class="hljs-title">getCreatedTime</span>()
    {
        <span class="hljs-keyword">return</span> $<span class="hljs-keyword">this</span>->createdTime;
    }

    <span class="hljs-javadoc">/**
     *<span class="hljs-javadoctag"> @param</span> \DateTime $createdTime
     */</span>
    <span class="hljs-keyword">public</span> function <span class="hljs-title">setCreatedTime</span>($createdTime)
    {
        $<span class="hljs-keyword">this</span>->createdTime = $createdTime;
    }

    <span class="hljs-javadoc">/**
     *<span class="hljs-javadoctag"> @return</span> \DateTime
     */</span>
    <span class="hljs-keyword">public</span> function <span class="hljs-title">getUpdatedTime</span>()
    {
        <span class="hljs-keyword">return</span> $<span class="hljs-keyword">this</span>->updatedTime;
    }

    <span class="hljs-javadoc">/**
     *<span class="hljs-javadoctag"> @param</span> \DateTime $updatedTime
     */</span>
    <span class="hljs-keyword">public</span> function <span class="hljs-title">setUpdatedTime</span>($updatedTime)
    {
        $<span class="hljs-keyword">this</span>->updatedTime = $updatedTime;
    }

    <span class="hljs-javadoc">/**
     *<span class="hljs-javadoctag"> @ORM</span>\Prepersist   //每次在commit前都会执行这个函数,达到自动更新创建时间和更新时间
     */</span>
    <span class="hljs-keyword">public</span> function <span class="hljs-title">PrePersist</span>(){
        <span class="hljs-keyword">if</span>($<span class="hljs-keyword">this</span>->getCreatedTime()==<span class="hljs-keyword">null</span>){
            $<span class="hljs-keyword">this</span>->setCreatedTime(<span class="hljs-keyword">new</span> \DateTime(<span class="hljs-string">'now'</span>));
        }
        $<span class="hljs-keyword">this</span>->setUpdatedTime(<span class="hljs-keyword">new</span> \DateTime(<span class="hljs-string">'now'</span>));
    }
}</code>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值