我使用:composer require annotations
然后
公共函数编辑操作(产品$product({
// echo '<pre>';
// print_r($product);
if(!$product){
throw $this->createNotFoundException("No product found for id:".$product->getId());
}
$product->setName('New product name!');
$product->flush();
return $this->redirectToRoute('product_show',[
'id'=>$product->getId()
]);
}
$product对象包含 Entity 中的所有属性,但 flush(( 方法被视为未定义。以下是错误消息:
Attempted to call an undefined method named "flush" of class "AppEntityProduct".
我按如下方式解决了这个问题:
/**
* @Route("/product/edit/{id}")
*/
public function updateAction($id)
{
$em = $this->getDoctrine()->getManager();
$product = $em->getRepository(Product::class)->find($id);
if (!$product) {
throw $this->createNotFoundException(
'No product found for id '.$id
);
}
$product->setName('New product name!');
$em->flush();
return $this->redirectToRoute('product_show', [
'id' => $product->getId()
]);
}
但我想用更少的代码来做到这一点,因为我可以传递$product对象。为什么第一种方法失败了?
注意:我正在使用symfony4。
您需要
获取管理器,并对其调用刷新,而不是直接调用flush()
实体对象
喜欢:
$em = $this-getDoctrine()->getManager();
$product = new Product();
$product->setName('New product name!');
$em->flush();
在第 $product->setName('New product name!');
行下,遵循以下代码:
$em->persist($product);
$em->flush();