【问题标题】:Symfony Doctrine PrePersist/PreUpdate not workingSymfony Doctrine PrePersist/PreUpdate 不工作
【发布时间】:2015-07-13 19:07:25
【问题描述】:

我在 symfony 中的生命周期回调有一些问题。这是我的实体:

<?php

namespace MainBundle\Bundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;
use AppBundle\Entity\Event;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * User
 *
 * @ORM\Table("users")
 * @ORM\Entity(repositoryClass="MainBundle\Bundle\Repository\UserRepository")
 * @ORM\HasLifecycleCallbacks()
 */
class User extends BaseUser
{

    public function __construct() {
        $this->events = new ArrayCollection();
        parent::__construct();
    }

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="joined", type="datetime")
     */
    private $joined;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="updated", type="datetime",nullable=true)
     */
    private $updated;

    /**
     * events
     *
     * @var ArrayCollection
     * @access private
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\Event",mappedBy="user")
     */
    private $events;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set joined
     *
     * @param \DateTime $joined
     * @return User
     */
    public function setJoined($joined)
    {
        $this->joined = $joined;

        return $this;
    }

    /**
     * Get joined
     *
     * @return \DateTime 
     */
    public function getJoined()
    {
        return $this->joined;
    }

    /**
     * Set updated
     *
     * @param \DateTime $updated
     * @return User
     */
    public function setUpdated($updated)
    {
        $this->updated = $updated;

        return $this;
    }

    /**
     * Get updated
     *
     * @return \DateTime 
     */
    public function getUpdated()
    {
        return $this->updated;
    }

    /**
     * Set events
     *
     * @param \DateTime $events
     * @return User
     */
    public function setEvents($events)
    {
        $this->events = $events;

        return $this;
    }

    /**
     * Get events
     *
     * @return ArrayCollection 
     */
    public function getEvents()
    {
        return $this->events;
    }

    /**
     * Add event
     *
     * @param Event $event
     * @return User
     */
    public function addEvent(Event $event)
    {
        $this->events->add($event);

        return $this;
    }

    /**
     * Remove event
     *
     * @param Event $event
     * @return User
     */
    public function removeEvent(Event $event)
    {
        $this->events->removeElement($event);

        return $this;
    }

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

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

我已经搜索了一段时间,仍然没有发现问题。我已经尝试了这里的一些变化,例如用区分大小写的规则进行实验(我的意思是在这两种方法周围使用大写/小写)并且我尝试用双星/**开始块引号(至于这个我仍然不知道它是否有效或不是)。如果这里需要更多文件,我会粘贴它们。

【问题讨论】:

    标签: php symfony doctrine-orm


    【解决方案1】:

    您似乎有一些拼写错误。而不是:

     @ORM/PrePersist
    

    尝试:

     @ORM\PrePersist
    

    例如:

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

    很惊讶这并没有引发异常,但是你去。希望这可以帮助! :)

    【讨论】:

    • 好吧,正式来说,我非常愚蠢。那行得通,谢谢! :) 顺便说一句,语法/** 是必需的。干杯!
    • 哈哈!你不是!容易打错:) 我确定我也做过同样的事情。很高兴它有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2011-11-10
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多