ECCUBE4

1対多リレーションについて

EC-CUBE4で1対多のリレーションについて、解説を進めます。

リレーションの設定はEntityファイル内で設定し、データベースへと反映させます。

EC-CUBE4のソースコードを見ながら解説していきます。

EC-CUBE4のデフォルト機能である、受注と受注アイテムの構成にて説明を行います。

Orderエンティティ

        /**
         * @var \Doctrine\Common\Collections\Collection|OrderItem[]
         *
         * @ORM\OneToMany(targetEntity="Eccube\Entity\OrderItem", mappedBy="Order", cascade={"persist","remove"})
         */
        private $OrderItems;

まず、受注の実体であるOrderエンティティを見ていきます。

@ORM\OneToManyで1対多の構成であると書いています。

1対多の構成とは、受注データはたくさんの商品を持っているという事です。

targetEntityで1対多の構成を取るEntityファイルを指定します。

今回は、Eccube\Entity\OrderItemとなります。

mappedByで本クラスのOrderを指定。

OrderItemエンティティ

        /**
         * @var \Eccube\Entity\Order
         *
         * @ORM\ManyToOne(targetEntity="Eccube\Entity\Order", inversedBy="OrderItems")
         * @ORM\JoinColumns({
         *   @ORM\JoinColumn(name="order_id", referencedColumnName="id")
         * })
         */
        private $Order;

@ORM\ManyToOneで、OrderItem自身はOrderに対してManyの関係であり、1つの受注(Order)に対して結びつく事を表しています。

@ORM\JoinColumnでorder_idはOrderのidを保存するカラムである事を表しています。

以上です。