所以我有一所学校,每所学校都有多个铃铛时间表,每个时间表都有详细信息:
school (document)
-- bell schedule (embedded document)
---- bell schedule details (embedded document)
当我克隆学校对象并打印学校时,它会返回克隆中的正确对象。但是,当我试图坚持学校时,它并没有正确保存细节。我需要做些什么来使其正常工作?我需要设置一个标志还是什么?
我试图做的是:$school2 = clone $school1;
$dm->persist($school2);
$dm->flush();
---- classes ----
/**
* @MongoDB\Document(collection="schools")
*/
class School
{
/**
* @MongoDB\EmbedMany
*/
protected $bell_schedules = array();
public function addBellSchedules(BellSchedule $bellSchedules)
{
$this->bell_schedules[] = $bellSchedules;
}
public function getBellSchedules()
{
return $this->bell_schedules;
}
public function setBellSchedules(\Doctrine\Common\Collections\ArrayCollection $bell_schedules)
{
$this->bell_schedules = $bell_schedules;
return $this;
}
}
/**
* @MongoDB\EmbeddedDocument
*/
class BellSchedule
{
/**
* @MongoDB\EmbedMany
*/
private $bell_schedule_details
public function getBellScheduleDetails()
{
return $this->bell_schedule_details;
}
public function setBellScheduleDetails(\Doctrine\Common\Collections\ArrayCollection $bell_schedule_details)
{
$this->bell_schedule_details = $bell_schedule_details;
return $this;
}
}
/**
* @MongoDB\EmbeddedDocument
*/
class BellScheduleDetail
{
private $period;
private $label;
}
答案 0 :(得分:0)
您的@EmbedMany
注释缺少targetDocument
属性,该属性应与嵌入对象的类名对应。有关详细信息,请参阅annotation reference。此外,您缺少BellScheduleDetail类的字段映射。您可能希望将@String用于这些字段。
最后,我建议将EmbedMany和ReferenceMany字段初始化为ArrayCollection实例而不是空数组。这样,您始终可以期望该属性是Collection实现(ArrayCollection或PersistentCollection)。在您的情况下(使用[]
运算符)可能没有太大区别,但如果您发现自己在属性上执行其他数组操作,它可以派上用场。