2

我对 Doctrine2 相当陌生,我正在尝试学习如何查询实体并更新它们。

我用来查询的方法是特定属性上的 findBy 方法来搜索数据库中的记录列表,“我的查询返回对象列表”。现在我想更新实体中一些我无法工作的属性。这是我所拥有的:

  /** Set the search attributes for hls**/
    $id = array("itemNbr" => $itemNbr);
    $hls = $this->emInstance->getRepository('entity\\Hls')->findBy($id);

    // on update hls
    foreach($hls as $h){

        $h->setAllRd($Rd);
        $h->setRdy($Rdy);
        $h->setNo($no);
        var_dump($h);
    }
    $this->emInstance->flush();
    var_dump($statHdr);

它到达循环中的第一个 var 转储,该转储返回一个对象列表,但由于使用了刷新,它没有到达第二个 var 转储。如果我在不使用 flush 方法的情况下执行,则属性会在 var_dump 中显示更新的信息,但实际上不会提交更新,因为 flush 不起作用。我究竟做错了什么。

此外,实体的 id 是 id,而 itemCnt

4

2 回答 2

0

在流程结束时使用 flush(),它会执行查询。

同时使用persist()

前任:

    $id = array("itemNbr" => $itemNbr);
    $hls = $this->emInstance->getRepository('entity\\Hls')->findBy($id);

    // on update hls
    foreach($hls as $h){

        $h->setAllRd($Rd);
        $h->setRdy($Rdy);
        $h->setNo($no);
        var_dump($h);
        //keep the changes in memory
        $this->emInstance->persist($h);
    }
    var_dump($statHdr);
    // insert the changes to the db
    $this->emInstance->flush();
于 2012-04-24T18:55:09.190 回答
-1

解决方法如下:

$crack = $em->getRepository('CrackBundle:Crack')->findBy(array('id' => 1 ));
 foreach ($crack as $c) {
 $c->setName('Nilton');
 $em->persist($c);
 $em->flush();
 }   
于 2019-05-28T22:43:55.640 回答