尽管为实体正确设置了值,但为什么会出现错误?

问题描述 投票:0回答:1

您好,我的网站是由symfony和mysql建立的。现在我陷入了这个错误。

publisher_id不能为null。

此错误意味着卷表的publisher_id列不能为空。此错误是正确的,但我将值设置为publisher_id并且我做了如下的var_dump并且得到了正确的实体。

$volume = new Volume(); //instanciate Volume Entity.
$volume->setISBN($ISBN);
$volume->setStorePublisher($publisher); //set Publisher Entity to Volume Entity.

var_dump($publisher->getId()); //correct id shown.why no publisher id???

$volume->setCreatedAt(Context::now());
$volume->setUpdatedAt(Context::now());

$em = Context::getEntityManagerWrite();
$em->transactional(function (EntityManager $em) use (&$volume) {
    $volume = $em->merge($volume); // i got error here.why ??
    $em->flush();
    //....
}
symfony doctrine
1个回答
0
投票

您的错误:

为了解决您的问题,您正在尝试合并一个非托管实体,首先在em内部将其持久化:

$volume = new Volume();
$volume->setISBN($ISBN);
$volume->setStorePublisher($publisher); 
$volume->setCreatedAt(Context::now());
$volume->setUpdatedAt(Context::now());

$em->persist($volume);

// do stuff

FYI:

在您的实体中,添加__construct方法以从控制器中删除此丑陋的createAt()

class Volume {

    public function __construct()
    {
        $this->setCreateAt(new \DateTime());
    }
}

对于updateAt(),您可以使用Doc中所示的服务。目的是使您的Controller尽可能轻。

© www.soinside.com 2019 - 2024. All rights reserved.