私はいくつかのオブジェクトをカスケードで保存して取得しようとしています。 私は3つ以上の3つのエンティティを持っています。entityManager保存してリフレッシュ
Entites:エンティティオーバー
class Order
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var object $basket
*
* @ORM\OneToOne(targetEntity="Entity\Basket", inversedBy="order")
*/
protected $basket;
...
}
class Basket
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var array $declinations
*
* @ORM\OneToMany(targetEntity="Entity\BasketDeclination", mappedBy="basket")
*/
protected $declinations;
/**
* Order owner (reversed side)
*
* @var OrderClient $order
*
* @ORM\OneToOne(targetEntity="Entity\Order", mappedBy="basket")
*/
protected $order;
...
}
class BasketDeclination
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var integer $basket
*
* @ORM\ManyToOne(targetEntity="Entity\Basket", inversedBy="declinations")
*/
protected $basket;
...
}
オブジェクト:
class OrderObject
{
function __construct(
EntityManager $em,
Order $entity = null,
BasketObject $basket = null
)
{
$this->em = $em;
if (!$entity) {
$this->entity = new Order();
$this->basket = $basket;
} else {
$this->setDataFromEntity($entity);
}
}
protected function setDataFromEntity(Order $entity)
{
$basketFactory = new BasketFactory($this->em);
$this->entity = $entity;
$this->basket = $basketFactory->getBasket($entity->getBasket()->getId());
}
public function save($flush = false)
{
// save subObject
$this->basket->save();
// set link
$this->entity->setBasket($this->basket->getEntity());
$this->em->persist($this->entity);
if ($flush) {
$this->em->flush();
}
}
public function refresh()
{
$this->em->refresh($this->entity);
$this->setDataFromEntity($this->entity);
}
...
}
class BasketObject
{
function __construct(EntityManager $em, Basket $entity = null)
{
$this->em = $em;
if (!$entity) {
$this->entity = new Basket();
$this->declinations = array();
} else {
$this->setDataFromEntity($entity);
}
}
protected function setDataFromEntity(Basket $entity)
{
$this->entity = $entity;
$this->declinations = array();
foreach ($entity->getDeclinations() as $declination) {
$this->declinations[] = new BasketDeclinationObject($this->em, $declination);
}
}
public function save($flush = false)
{
foreach ($this->declinations as $declination) {
$declination->save();
}
$this->em->persist($this->entity);
if ($flush) {
$this->em->flush();
}
}
...
}
class BasketDeclinationObject
{
public function __construct(
EntityManager $em,
BasketDeclination $entity= null,
BasketObject $basket = null)
{
$this->em = $em;
if (!$entity) {
$this->entity = new BasketDeclination();
$this->basket = $basket;
} else {
$this->setDataFromEntity($entity);
}
}
protected function setDataFromEntity(BasketDeclination $entity)
{
$this->entity = $entity;
$declinationFactory = new DeclinationFactory($this->em);
$this->declination = $declinationFactory->getDeclination($entity->getDeclination()->getId());
}
public function save($flush = false)
{
if ($this->quantity <= 0) {
$this->em->remove($this->entity);
$this->remove = true;
return ;
}
if (!$this->entity->getId()) {
$this->entity->setBasket($this->basket->getEntity());
}
$this->entity->setQuantity($this->quantity);
$this->em->persist($this->entity);
if ($flush) {
$this->em->flush();
}
}
...
}
問題は私のテストでは、私はその後、バスケットを保存してBasketDeclinationすぎている を保存BasketDeclinationを追加するためのバスケットのためにしようとするということです。 は、それから私$バスケット - >)が(リフレッシュするとバスケットがリフレッシュされ、BasketDeclinaitonは、エンティティ
から再構築されますが、私はバスケットwhith順序を持っていると私はBasketDeclinaiton($ order->バスケット - > addDeclinationを(追加するとき。 ..)) 私はすべてのエンティティを保存するとき 私は注文を更新するとき、私は注文とバスケットを取得します。 エンティティ$ basket-> getDeclinations()には何もありません
私は間違っていますか?
これは、暗闇の中で純粋なショットです(それはあなたがネストされたオブジェクトを操作するとき、あなたのプロキシが作成され、すべての権利を働いていることを確認するために、あまりにも常に良い考えです)リフレッシュする前にclear()を実行してください。私の貧しい脳が追いつくためには、あまりにも多くの物や物事が進行しています。また、問題を示す非常に単純なテストケースを投稿することを検討することもできます。 – Cerad
1点...「あまりにも多くのオブジェクトがあり、私の貧弱な脳に続いていることがあります」 –