エスプリフォートでは、ECによる請負開発やプロダクト(自社サービス)開発は長く行っており、その中の一つとしてEC-CUBEももちろん取り扱ってきました。
このEC-CUBEやEC-CUBEのアドオン開発に関することをご紹介していきます。
アドオン開発では必須のテーブルの新規作成
今回はEC-CUBEでテーブルを新規作成する方法をご紹介します。
テーブルを作成するためには、EntityクラスとRepositoryクラスを作る必要があります。
EC-CUBEではテーブル定義をEntityクラスでアノテーションとして定義するO/R Mapperが取り入れられています。
EC-CUBEではO/R MapperとしてDoctrineが採用されています。
※アプリケーションフレームワークはsymfonyを採用しています。
このDoctrineを利用して「dtb_test」というテーブルを作成してみましょう。
1、Entityクラスの作成しよう!
「[インストールディレクトリ]/app/Customize/Entity」に「Test.php」を追加し、下記コードを書きます。
※PHPのファイル名と下記コードの「Test」の部分を自分で作るテーブル名で書くようにしてください。
※新たに作るテーブル名等のテーブルに関する定義を、クラスのアノテーションに設定してください。
※フィールド変数がテーブルのカラムとなりますので、カラムと同じ名前のフィールドとフィールドに対するGETTER、SETTERのメソッドを作り、フィールドのアノテーションにはカラムの定義を設定してください。
<?php
namespace Customize\Entity;
use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation as Eccube;
use Symfony\Component\Validator\Constraints as Assert;
if (!class_exists('\Customize\Entity\Test')) {
/**
* メッセージテーブル
*
* @ORM\Table(name="dtb_test", options={"comment":"テストテーブル"})
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="discriminator_type", type="string", length=255)
* @ORM\HasLifecycleCallbacks()
* @ORM\Entity(repositoryClass="Customize\Repository\TestRepository")
*/
class Test extends \Eccube\Entity\AbstractEntity
{
/**
* 代理キー
*
* @var int
*
* @ORM\Column(name="id", type="integer", options={"unsigned":true, "comment":"ID"})
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* 会員ID
*
* @var int
*
* @ORM\Column(name="customer_id", type="integer", nullable=false, options={"comment":"会員ID"})
*/
private $custmer_id;
/**
* タイトル
*
* @var string|null
*
* @ORM\Column(name="title", type="string", length=255, nullable=true, options={"comment":"タイトル"})
*/
private $title;
/**
* 最終送信日時
*
* @var last_send_date
*
* @ORM\Column(name="last_send_date", type="datetimetz", nullable=false, options={"comment":"最終送信日時"})
*/
private $last_send_date;
/**
* Get id.
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set 会員ID
*
* @param int $customer_id
*
* @return Message
*/
public function setCustomerId($customer_id)
{
$this->customer_id = $customer_id;
return $this;
}
/**
* Get 会員ID
*
* @return int
*/
public function getCustomerId()
{
return $this->customer_id;
}
/**
* Set タイトル
*
* @param string $title
*
* @return Message
*/
public function setTitle($title)
{
$this->title = $title;
return $this;
}
/**
* Get タイトル
*
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* Set 最終送信日時
*
* @param datetimetz $lastSendDate
*
* @return Message
*/
public function setLastSendDate($lastSendDate)
{
$this->last_send_date = $lastSendDate;
return $this;
}
/**
* Get 最終送信日時
*
* @return datetimetz
*/
public function getLastSendDate()
{
return $this->last_send_date;
}
}
}
2、Repositoryを作成してみよう!
次に「[インストールディレクトリ]/app/Customize/Repository」に、「TestRepository.php」を追加し、下記コードを書きます。
※PHPのファイル名と下記コードの「Test」の部分を自分で作るテーブル名で書くようにしてください。
<?php
namespace Customize\Repository;
use Customize\Entity\Test;
use Eccube\Repository\AbstractRepository;
use Symfony\Bridge\Doctrine\RegistryInterface;
/**
* Messageテーブルリポジトリ
*/
class TestRepository extends AbstractRepository
{
public function __construct(RegistryInterface $registry)
{
parent::__construct($registry, Test::class);
}
}
3、EC-CUBEのコマンド実行でテーブルを自動生成してみよう!
下記コマンドを実行することにより、エンティティのアノテーションに提議したテーブル定義で、DBにテーブルが自動で生成されます。
// キャッシュクリア
php [EC-CUBEインストールディレクトリ]/bin/console cache:clear --no-warmup
// テーブル追加SQL実行('--force'を付けずに叩くと、実行予定のSQL文が表示されます)
php [EC-CUBEインストールディレクトリ]/bin/console eccube:schema:update --dump-sql --force
最後に
これでテーブルの新規作成は完了です。
ぜひEC-CUBEでのアドオン開発にて生かして頂ければと思います。