работа с объектом DateTime, полученным из доктрины - PullRequest
0 голосов
/ 06 мая 2018

Я получаю объект DateTime от $ lastPricing-> getExpiredAt ().

После этого я пытаюсь сохранить новый объект:

  $pricing = new AccountPricing();
  if ($currentPricing) {
      $start_date = $currentPricing->getExpiredAt();
  } else {
      $start_date = new \DateTime('now');
  }
  $pricing->setStartedAt($start_date);
  $this->entityManager->persist($pricing);
  $this->entityManager->flush();
  // This temporaly fix
  $start_date->modify('+ ' . $period . ' month');
  $pricing->setExpiredAt($start_date);
  $this->em->persist($pricing);
  $this->em->flush();

Если я попробую это:

  $pricing = new AccountPricing();
  if ($currentPricing) {
      $start_date = $currentPricing->getExpiredAt();
  } else {
      $start_date = new \DateTime('now');
  }
  $pricing->setStartedAt($start_date);
  $start_date->modify('+ ' . $period . ' month');
  $pricing->setExpiredAt($start_date);
  $this->em->persist($pricing);
  $this->em->flush();

В start_at и expired_at пишутся похожие даты (те, что после модификации).

Я думаю, это потому, что DateTime - это объекты, а в php все объекты передаются по ссылке.

Есть идеи, как я могу сделать это без двойной промывки?

1 Ответ

0 голосов
/ 06 мая 2018

Я забыл о клоне:

  $pricing = new AccountPricing();
  if ($currentPricing) {
      $start_date = $currentPricing->getExpiredAt();
  } else {
      $start_date = new \DateTime('now');
  }
  $pricing->setStartedAt($start_date);
  $end_date = clone $start_date;
  $end_date->modify('+ ' . $period . ' month');
  $pricing->setExpiredAt($end_date);
  $this->em->persist($pricing);
  $this->em->flush();
...