明らかに単純な問題がありますが、数時間の試行錯誤の後、私は間違った結果しか得ません。Symfony:Datetimeフィールドを持つオブジェクトを複製し、複製されたオブジェクトの日付を追加する
目的は、HallReservation
にOneToMany関係のオブジェクトConvention
を複製し、この予約に数日を追加することです。私が得た結果は、複製されたオブジェクトと元のオブジェクトに日が追加され、元のオブジェクトを変更しないままにしておきたいということです。
これは重要なコードです:あなたは、私は、元のコンベンションホールの予約の日付もされているどこでもそれでもdatetimeオブジェクトのクローンを作成見たよう
$jumpInterval = $originalConventionBeginDate->diff($newDate);
foreach ($newConvention->getHallReservation() as $newHallR)
{
$prevDate = clone $newHallR->getDate();
$prevDate->add($jumpInterval);
$newHallR->setDate($prevDate);
}
$em->persist($newConvention);
$em->flush();
:
/**
* @ORM\Entity()
*/
class Convention
{
/**
* @ORM\OneToMany(targetEntity="HallReservation", mappedBy="convention", cascade={"all"})
*/
private $hallReservation;
/**
* Clone object
*
*/
public function __clone()
{
if ($this->id)
{
$this->id=null;
$this->reference = null;
$this->registrationDate = new \Datetime('now');
foreach ($this->hallReservation as $hallR)
{
$clonedR = clone $hallR;
$clonedR->setConvention($this);
$newRDate = clone $hallR->getDate();
$clonedR->setDate($newRDate);
$this->hallReservation->add($clonedR);
}
}
}
/**
* @ORM\Entity()
*/
class HallReservation
{
/**
* @var \Date
*
* @ORM\Column(name="date", type="date")
*/
private $date;
/**
* Clone object
*
*/
public function __clone()
{
if ($this->id)
{
$this->id=null;
$clonedDate = clone $this->date;
$this->date = $clonedDate;
}
コントローラー・コード追加されました。
を? '__clone'メソッドを使わないで、新しいentitesをサービス内で手動で作成することも考えられます:/ – Mcsky