在 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
定义)
我有一个文章实体属于一个类别实体:
/**
* 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
定义)