尝试调用名为 "flush" 的未定义方法



我使用: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();

相关内容

  • 没有找到相关文章

最新更新