可以在doctrine实体中使用setId()作为id吗?

时间:2017-08-27 08:18:16

标签: symfony doctrine

我想设置id手册我在我的Test实体中编写这段代码:

我可以像我的代码一样使用setId()吗?

我的代码在这里:

 /**
 * Test
 * @ORM\Table(name="test")
 */
class Test
{
    /**
     * @var int
     * @ORM\Column(name="id", type="integer")
     */
    private $id;

    /**
     * @var string
     * @ORM\Column(name="name", type="string", length=255)
     */
    private $name;


    /**
     * Set id
     * @param integer $id
     * @return Test
     */
    public function setId($id)
    {
        $this->id = $id;

        return $this;
    }

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

   // other methods
}

这是设置ID的正确方法吗? 如果不是正确和标准的方式?

2 个答案:

答案 0 :(得分:5)

您可以使用自己的主键,告诉教义不要产生值...

https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/annotations-reference.html#annref_generatedvalue

/**
 * Test
 * @ORM\Table(name="test")
 */
class Test
{
    /**
     * @var int
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE")
     * @ORM\Column(name="id", type="integer")
     */
    private $id;

    /**
     * Set id
     * @param integer $id
     * @return Test
     */
    public function setId($id)
    {
        $this->id = $id;

        return $this;
    }

在持久之前不要忘记setId!

答案 1 :(得分:2)

Doctrine希望在将实体持久化/刷新到数据库(或从数据库中获取)之后,实体的主键是不可变的(不可更改的)

您编写的代码在PHP方面完全正确,但如果您使用setId(),很可能会破坏教义功能。

如果您对内部感兴趣,请查看" Doctrine身份地图"