在 PrePersist 事件期间无法设置映射的关联 ID

Cannot set mapped association Id during PrePersist event

我有一个文章实体属于一个类别实体:

/**
 * Article
 *
 * @ORM\Table(name="articles")
 * @ORM\Entity(repositoryClass="App\Repository\ArticlesRepository")
 * @ORM\HasLifecycleCallbacks
 */
class Article {

    /**
     * @ORM\Column(name="category_id", type="integer", nullable=true)
     */
    private $categoryId;
    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Category", inversedBy="articles")
     */
    private $category;
}

并且我在 PrePersist 事件中手动设置了 category_id 字段:

/** @ORM\PrePersist */
public function setProperPosition(\Doctrine\ORM\Event\LifecycleEventArgs $event){
    $this->categoryId = 1;
}

但是这是行不通的。该字段 (category_id) 在数据库中保持为空。

我不确定为什么同一列有两个属性。您有 $category$categoryId,它们基本上引用相同的 value.

所以基本上你要声明同一列两次。这可能会给您带来麻烦。

无论如何,这样试试:

/**
 * @ORM\Table(name="articles")
 * @ORM\Entity(repositoryClass="ArticlesRepository")
 * @ORM\HasLifecycleCallbacks
 */
class Article
{
    /**
     * @ORM\ManyToOne(targetEntity="Category", inversedBy="articles")
     */
    private $category;

    /** @ORM\PrePersist */
    public function setProperPosition(LifecycleEventArgs $event)
    {
        $this->category = $event
            ->getEntityManager()
            ->getReference(Category::class, 1);
    }
}

我简化了所有必需的命名空间。确保 use 它们已导入并在文件中可用。

(为清楚起见,去掉多余的$categoryId定义)