Reputation: 2683
I have a ManyToOne connection between my Offer
and 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
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