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がでていれば実行完了です、実際にテーブルが作成されているか確認しましょう。
以上です。
スポンサーリンク
スポンサーリンク