无法在预持久化事件期间设置映射的关联 ID



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

/**
* Article
*
* @ORMTable(name="articles")
* @ORMEntity(repositoryClass="AppRepositoryArticlesRepository")
* @ORMHasLifecycleCallbacks
*/
class Article {
/**
* @ORMColumn(name="category_id", type="integer", nullable=true)
*/
private $categoryId;
/**
* @ORMManyToOne(targetEntity="AppEntityCategory", inversedBy="articles")
*/
private $category;
}

我手动设置category_idPrePersist事件中的字段:

/** @ORMPrePersist */
public function setProperPosition(DoctrineORMEventLifecycleEventArgs $event){
$this->categoryId = 1;
}

但是是行不通的。字段 (category_id( 在数据库上保持为空。

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

所以基本上你声明同一列两次。这就是可能会给你带来麻烦的原因。

无论如何,尝试一下:

/**
* @ORMTable(name="articles")
* @ORMEntity(repositoryClass="ArticlesRepository")
* @ORMHasLifecycleCallbacks
*/
class Article
{
/**
* @ORMManyToOne(targetEntity="Category", inversedBy="articles")
*/
private $category;
/** @ORMPrePersist */
public function setProperPosition(LifecycleEventArgs $event)
{
$this->category = $event
->getEntityManager()
->getReference(Category::class, 1);
}
}

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

(为清楚起见,请删除多余的$categoryId定义(

最新更新