在日期获得过期的空值

时间:2014-05-22 09:21:29

标签: sql symfony doctrine

这是我的实体类:

namespace Bits\JobBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Bits\JobBundle\Utils\Jobeet as Jobeet;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * Job
 * 
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Bits\JobBundle\Entity\JobRepository")
 * @ORM\HasLifecycleCallbacks()
 */


class Job
{

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

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

    /**
     * @var \DateTime
     */
    private $updated_at;

    /**
     * @var \Bits\JobBundle\Entity\Category
     */
    private $category;

    /**
     * Set expires_at
     * @ORM\PrePersist
     * @param \DateTime $expires_at
     * @return Job
     */
    public function setExpiresAt()
    {
        $this->expires_at=new \DateTime();

        return $this;
    }

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

Job.orm.yml

Bits\JobBundle\Entity\Job:
    type: entity
    table: job
    id:
        id:
            type: integer
            generator: {strategy: auto}
    fields:
        type:
            type: string
            length: 255
            nullable: true
        expires_at:
            type: datetime
        created_at:
            type: datetime
        updated_at:
            type: datetime
            nullable: true
    manyToOne:
        category:
            targetEntity: Category
            inversedBy: jobs
            joinColumn:
                name: category_id
                referencedColumnName: id
    lifeCycleCallbacks:
        prePersist: [setCreatedAt, setExpiresAt]
        preUpdate: [setUpdatedAt]

我在expires_at值中得到空值。

这是SQL错误。

执行'INSERT INTO作业(类型,公司,徽标,网址,位置,位置,描述,how_to_apply,令牌,is_public,is_activated,email,expires_at,created_at,updated_at,category_id)时发生异常(?,? ,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'与params [null,“test”,null,null,“test”,“test” ,“test”,“test”,“sdfa”,0,null,“asdf”,null,null,null,null]:

如何调试?

2 个答案:

答案 0 :(得分:0)

添加类似的方法:

/**
 * @ORM\PrePersist
 */
public function setExpiresAtCreate()
{
    if ($this->expires_at === null)
        $this->expires_at = new \DateTime('2222-12-22');
}

并改变lifecycleCallbacks:

lifeCycleCallbacks:
        prePersist: [setCreatedAtCreate, setExpiresAtCreate]
        preUpdate: [setUpdatedAtUpdate]

请尽量不要将lifecycleCallbacks命名为settes,这是不好的做法

答案 1 :(得分:0)

添加到PrePersist()

/**
 * @ORM\PrePersist()
 */
public function setExpiresAtCreate()
{
    if ($this->expires_at === null)
        $this->expires_at = new \DateTime('2222-12-22');
}

public function __construct()
{
    $this->expires_at = new \DateTime('2222-12-22');
}