ManyToOne 实体在刷新后为空,但正确保存在数据库中



我的OfferOfferObject实体之间有一个 ManyToOne 连接(一个产品/服务可以有多个 offerObjects(:

提供

/**
 * @ORMOneToMany(targetEntity="AppBundleEntityOfferObject", mappedBy="offer")
 */
protected $offerObject;

报价对象

/**
* @ORMManyToOne(targetEntity="AppBundleEntityOffer, inversedBy="offerObject")
*/
protected $offer;

现在我创建一个报价:

/* Create New Offer */
$offer = new Offer();
....    
$em->persist($offer);

我立即添加像这样的 OfferObjects:

foreach ($request->get('products') as $product) {
    $oo = new OfferObject();
    $oo->setOffer($offer);
    ....
    $em->persist($oo);
}

最后我冲洗它们:

try {
    $em->flush();
} catch (Exception $e) {
    ....
}

Everthing按预期保存在数据库中,但是当我在flush后立即执行此操作时,它什么也没显示:

foreach($offer->getOfferObject() as $ob){
    echo $ob->getPrice()."<br />";
}

在"显示"之前,我还需要执行其他操作吗?

//编辑 如果我手动查找数据库中的最后一个 ID(在本例中为 16(,它会按预期工作。

$offerFromDB = $em->getRepository('AppBundle:Offer')->find(16);
foreach($offerFromDB->getOfferObject() as $ob){
    echo $ob->getPrice()."<br />";
}

你必须通过从数据库中id来获取新的Offer对象。或者简单地更改您的代码,如下所示:

foreach ($request->get('products') as $product) {
    $oo = new OfferObject();
    $oo->setOffer($offer);
    ....
    $em->persist($oo);
    $offer->addOfferObject($oo);
}

最新更新