I have entities Basketand BasketItem:
class Basket
{
private $id;
protected $items;
public function __construct() {
$this->items = new ArrayCollection();
}
public function addItem(BasketItem $item)
{
$key = $this->find($item->getProduct()->getId());
if ($key === false) {
$this->items->add($item);
} else {
$this->items->get($key)->raiseQuantity($item->getQuantity());
}
}
public function find($id)
{
foreach ($this->items as $key => $item) {
if ($item->getProduct()->getId() == $id)
return $key;
}
return false;
}
}
class BasketItem
{
private $id;
private $basket;
}
Now, when I create a basket and fill it with items, I have problems with saving it in db.
The following does not work properly.
$basket = new Basket();
$basket->addItem(new BasketItem($product1, 1));
$basket->addItem(new BasketItem($product2, 2));
$em->persist($basket);
$em->flush();
Then I consulted the manual more carefully :
$basket = new Basket();
$basket->addItem(new BasketItem($product1, 1));
$basket->addItem(new BasketItem($product2, 2));
$em->persist($basket);
foreach ($basket->getItems() as $item) {
$em->persist($item);
}
$em->flush();
This did not work as expected.
In both cases, all data is stored in the database , but the basket items are not associated with the basket, i.e. order_idobject BasketItem NULL.
Can someone explain to me what I'm doing wrong, please? Please note that I am new to the Doctrine. Thank!
EDIT
I'm really confused. Here is my simplified test:
<?php
namespace Amsel\BasketBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
class Basket
{
private $id;
protected $items;
public function __construct() {
$this->items = new ArrayCollection();
}
public function addItem(BasketItem $item)
{
$this->items->add($item);
}
public function getId()
{
return $this->id;
}
public function getItems()
{
return $this->items;
}
}
<?php
namespace Amsel\BasketBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
class BasketItem
{
private $id;
protected $basket;
public function getId()
{
return $this->id;
}
public function setBasket(\Amsel\BasketBundle\Entity\Basket $basket)
{
$this->basket = $basket;
}
public function getBasket()
{
return $this->basket;
}
}
public function testAction(Request $request) {
$em = $this->getDoctrine()->getEntityManager();
$basket = new Basket();
$basket->addItem(new BasketItem());
$basket->addItem(new BasketItem());
$em->persist($basket);
try {
$em->flush();
} catch(Exception $e) {
die('ERROR: '.$e->getMessage());
}
die ('end');
}
- (BasketItem) , (Basket).