文章转载自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>