我有一个文章实体属于一个类别实体:
/**
* 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_id
PrePersist
事件中的字段:
/** @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
定义(