是否可以在学说实体中使用 setId() 作为 id?

A.S*_*ghi 3 doctrine symfony

我想设置 id 手册我在我的测试实体中编写此代码:

我可以对像我的代码这样的实体使用 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
}
Run Code Online (Sandbox Code Playgroud)

这是设置 id 的正确方法吗?如果不是,正确和标准的方法是什么?

Sil*_*ioQ 6

您可以使用自己的主键,告诉 Doctrine 不要生成值......

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;
    }
Run Code Online (Sandbox Code Playgroud)

在坚持之前不要忘记 setId !


Xym*_*nek 3

Doctrine 期望实体的主键在实体被持久化/刷新到数据库(或从数据库获取)后是不可变的(不可更改的)。

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

如果您对内部结构感兴趣,请查找“学说身份图”