PrimuS
PrimuS

Reputation: 2683

ManyToOne Entity empty after flush but saved in Database correctly

I have a ManyToOne connection between my Offerand my OfferObject entities (one offer can have many offerObjects):

Offer

/**
 * @ORM\OneToMany(targetEntity="AppBundle\Entity\OfferObject", mappedBy="offer")
 */
protected $offerObject;

OfferObject

/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Offer, inversedBy="offerObject")
*/
protected $offer;

Now I create an offer:

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

and immediately I add OfferObjects like this:

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

And finally I flush them:

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

Everthing is in saved in the database as expected, but when I do this immediately after the flush, it shows nothing:

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

Do I have to do anything else before`displaying?

//EDIT If I look manually for the last ID in the DB (in this case 16) it works as intended.

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

Upvotes: 1

Views: 377

Answers (1)

Lost Koder
Lost Koder

Reputation: 884

You have to fetch new Offer object by it's id from database. Or simply change your code like below:

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

    $offer->addOfferObject($oo);
}

Upvotes: 2

Related Questions