ECCUBE4

テーブルの新規作成

EC-CUBE4で、新しくテーブルを作成するにはEntityファイルを作成して、コマンドライン操作によりできます。

今回は商品に付随するオプションを追加するために管理するテーブルを作成しましょう。

テーブルで管理する内容としては、オプション名とオプション価格とします。

でわ、みていきましょう。

Entityファイルの作成

EC-CUBE4ではデフォルトでEntityファイルを生成するコマンドはありませんので手動かsrc配下のファイルをコピーして使用しましょう。

<?php

namespace Customize\Entity;

use Doctrine\ORM\Mapping as ORM;

if (!class_exists('\Eccube\Entity\Option')) {
    /**
     * Option
     *
     * @ORM\Table(name="dtb_option")
     * @ORM\InheritanceType("SINGLE_TABLE")
     * @ORM\DiscriminatorColumn(name="discriminator_type", type="string", length=255)
     * @ORM\HasLifecycleCallbacks()
     * @ORM\Entity(repositoryClass="Customize\Repository\OptionRepository")
     */
    class Option extends \Eccube\Entity\AbstractEntity
    {

        /**
         * @var int
         *
         * @ORM\Column(name="id", type="integer", options={"unsigned":true})
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        private $id;

        /**
         * @var string
         *
         * @ORM\Column(name="name", type="string", length=255)
         */
        private $name;

        /**
         * @var int
         *
         * @ORM\Column(name="price", type="integer")
         */
        private $price;


        /**
         * Get id.
         *
         * @return Id
         */
        public function getId()
        {
            return $this->id;
        }

        /**
         * Get name
         *
         * @return name
         */
        public function getName()
        {
            return $this->name;
        }

        /**
         * Set name
         *
         * @return this
         */
        public function setName($name)
        {
            $this->name = $name;
        }

        /**
         * Get price
         *
         * @return price
         */
        public function getPrice()
        {
            return $this->price;
        }

        /**
         * Set price
         *
         * @return this
         */
        public function setPrice($price)
        {
            $this->price = $price;
        }
    }
}
Entityファイルの解説

5行目:SQLの実行に関するクラスを呼び出しています。

11〜15行目:テーブル作成に関する、事項を書いています。とりあえず、11行目のテーブル名の定義、15行目のRepositoryの定義をしましょう

20〜41行目:テーブルに追加するカラムの設定です、カラム名や型を記載します。private変数を定義しておきます。この変数は他のクラスで使うために使用します。

44〜92行目:ゲッターとセッターの定義です、他のクラスでテーブルに保存したデータを呼び出したり、または保存する際に使用します。

テーブル作成コマンドの実行

SQLコマンドの確認

でわ実行されるSQLコマンドを確認しましょう。このコマンではまだ実行はされません。

$ bin/console d:s:u --dump-sql
//bin/console doctrine:schema:update --dump-sqlの略です

The following SQL statements will be executed:

CREATE TABLE dtb_option (id INT UNSIGNED AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, price INT NOT NULL, discriminator_type VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = InnoDB;

上記のように、CREATE…とテーブル作成のコマンドがでていれば問題なしです。エラー等が発生している場合は、先ほど作成したEntityファイルに誤字等ないか確認しましょう。

SQLコマンドの実行

$ bin/console d:s:u --dump-sql --force

 The following SQL statements will be executed:

     CREATE TABLE dtb_option (id INT UNSIGNED AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, price INT NOT NULL, discriminator_type VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = InnoDB;

 Updating database schema...

     1 query was executed

                                                                                                                        
 [OK] Database schema updated successfully!     

最後にOKがでていれば実行完了です、実際にテーブルが作成されているか確認しましょう。

以上です。