0

私には学校があり、各学校には複数のベルスケジュールがあり、各スケジュールには詳細があります。

school (document)
-- bell schedule (embedded document)
---- bell schedule details (embedded document)

学校オブジェクトのクローンを作成して学校を print_r すると、クローンに適切なオブジェクトが返されます。ただし、学校を永続化しようとすると、詳細が適切に保存されません。これが正しく機能するために何かする必要がありますか? 私が設定する必要があるフラグはありますか?

私がやろうとしていることは次のとおりです。

$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;
    }
4

1 に答える 1

0

@EmbedMany注釈targetDocumentに、埋め込みオブジェクトのクラス名に対応する属性がありません。詳細については、注釈リファレンスを参照してください。また、BellScheduleDetail クラスのフィールド マッピングがありません。これらのフィールドには@Stringを使用できます。

最後に、EmbedMany フィールドと ReferenceMany フィールドを空の配列ではなく ArrayCollection インスタンスとして初期化することをお勧めします。そうすれば、プロパティがコレクションの実装 (ArrayCollection または PersistentCollection) であることが常に期待できます。あなたのケースでは([]演算子を使用して)大きな違いはないかもしれませんが、プロパティで他の配列操作を行っていることに気付いた場合に便利です。

于 2012-08-13T14:48:01.267 に答える