プラグインでテーブルを新たに作成する際の手順について、解説します。
Edit me

前提

プラグインジェネレータで、プラグインコードを「Customize」で作成したものとして、解説していきます。 プラグインジェネレータの利用方法については、こちらを参照してください。

今回は、以下のテーブルを作成します。

CREATE TABLE plg_customize_sample(
    id SMALLINT NOT NULL,
    name TEXT DEFAULT NULL,
    rank SMALLINT NOT NULL,
    PRIMARY KEY(id)
);

config.ymlの修正

app/Plugin/Customize/config.ymlにdoctrineの定義ファイルのパスを設定します。 orm.pathの定義を追加して下さい。

name: カスタマイズ
code: Customize
version: 1.0.0
event: CustomizeEvent
service:
    - CustomizeServiceProvider
orm.path:
  - /Resource/doctrine

dcm.ymlの作成

app/Plugin/Resource/doctrine以下に、定義ファイルを作成します。※ディレクトリがない場合は作成して下さい。 ファイル名は、Plugin.Customize.Entity.Sample.dcm.ymlとしてください。

Plugin\Customize\Entity\Sample:
    type: entity
    table: plg_customize_sample
    repositoryClass: Plugin\Customize\Repository\SampleRepository
    id:
        id:
            type: smallint
            nullable: false
            unsigned: false
            id: true
    fields:
        name:
            type: text
            nullable: true
        rank:
            type: smallint
            nullable: false
            unsigned: false
    lifecycleCallbacks: {  }

doctrineのマッピング定義について詳しくはこちらをを参照してください。

テーブルの作成

dcm.ymlの定義から、データベースのテーブルを生成します。 以下のコマンドを実行します。

$ ./vendor/bin/doctrine orm:schema-tool:update --dump-sql

以下のように、実行されるSQLを確認できます。

CREATE TABLE plg_customize_sample (id SMALLINT NOT NULL, name TEXT DEFAULT NULL,rank SMALLINT NOT NULL, PRIMARY KEY(id));

--forceオプションで、SQL文を実行します。

$ ./vendor/bin/doctrine orm:schema-tool:update --force

以下のように表示されれば成功です。

Updating database schema...
Database schema updated successfully! "1" queries were executed

Entityクラスの作成

Entityクラスを生成します。以下のコマンドを実行してください。

$ ./vendor/bin/doctrine orm:generate:entities --filter=Plugin\\Customize\\Entity\\Sample --extend=Eccube\\Entity\\AbstractEntity app/

以下のように表示されれば成功です。

Processing entity "Plugin\Customize\Entity\Sample"

Entity classes generated to "[EC-CUBEのインストールディレクトリ]/app"

app/Plugin/Customize/Entity/Sample.phpファイルが生成されています。

Repositoryクラスの作成

Repositoryクラスを生成します。以下のコマンドを実行してください。

$ ./vendor/bin/doctrine orm:generate:repositories --filter=Plugin\\Customize\\Entity\\Sample app/

以下のように表示されれば成功です。

Processing entity "Plugin\Customize\Entity\Sample"

Entity classes generated to "[EC-CUBEのインストールディレクトリ]/app"

app/Plugin/Customize/Repository/SampleRepository.phpファイルが生成されています。

ServiceProviderにRepositoryの定義を行う

app/Plugin/Customize/ServiceProvider/CustomizeServiceProviderに、Repositoryを定義します。 registerメソッド内に、以下のように記載をしてください。

class CustomizeServiceProvider implements ServiceProviderInterface
{
    public function register(BaseApplication $app)
    {
        // Repository
        $app['plugin.customize.repository.sample'] = $app->share(function () use ($app) {
            return $app['orm.em']->getRepository('Plugin\Customize.Entity\Sample');
        });

Contorollerからは、以下のように呼び出すことができます。

$Samples = $app['plugin.customize.repository.sample']->findAll();