您好,我的网站是由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();
//....
}
为了解决您的问题,您正在尝试合并一个非托管实体,首先在em
内部将其持久化:
$volume = new Volume();
$volume->setISBN($ISBN);
$volume->setStorePublisher($publisher);
$volume->setCreatedAt(Context::now());
$volume->setUpdatedAt(Context::now());
$em->persist($volume);
// do stuff
在您的实体中,添加__construct
方法以从控制器中删除此丑陋的createAt()
class Volume {
public function __construct()
{
$this->setCreateAt(new \DateTime());
}
}
对于updateAt()
,您可以使用Doc中所示的服务。目的是使您的Controller
尽可能轻。