EC-CUBE3(Silex)ではApplication::getInstance()により$appオブジェクトを取得し、そこから$app[‘orm.em’]としてエンティティマネージャを呼び出していました。
それではEC-CUBE4(Symfony3)ではどのようにエンティティやレポジトリをマイグレーションで使用するのでしょうか?

結論から言うとマイグレーションファイルにContainerAwareInterfaceを実装することでcontainerを使用することができるようになり、レポジトリクラスのオブジェクトを取得できます。

実装方法

ContainerAwareInterfaceをimplementsし、実装したsetContainerメソッド内でコンテナを保持します。
postUpメソッド内でcontainerやentity managerを利用してレポジトリ・エンティティを呼び出します。

マイグレーションで送料無料条件を設定する例

次の例では送料無料条件(金額)を10,800円に設定するEC-CUBE4のマイグレーションです。
BaseInfoのレポジトリ・エンティティを利用してショップ設定を更新しています。

<?php declare(strict_types=1);

namespace DoctrineMigrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
use Doctrine\ORM\EntityManager;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Auto-generated Migration: Please modify to your needs!
 */
final class Version20190106043954 extends AbstractMigration implements ContainerAwareInterface
{
	private $container;

	/**
	 * @var EntityManager
	 */
	private $em;

	public function setContainer(ContainerInterface $container = null)
	{
		$this->container = $container;
		$this->em = $this->container->get('doctrine.orm.entity_manager');;
	}

    public function up(Schema $schema) : void
    {

    }

    public function postUp(Schema $schema)
    {
	    $repository = $this->em->getRepository('Eccube\Entity\BaseInfo');

	     $BaseInfo = $repository->get();
	     $BaseInfo->setDeliveryFreeAmount(10800);
             $this->em->flush($BaseInfo);
    }

    public function down(Schema $schema) : void
    {
        // this down() migration is auto-generated, please modify it to your needs

    }

}

 


関連するカスタマイズ

マイグレーションの作成・実行方法 EC-CUBE4ではマイグレーションに関する考え方がEC-CUBE3から変更されています。 カラムの追加などはマイグレーションを使用せずに同期するようなっています。 ただ設定項目の変更やデータの変更は引き続きマイグレーションで行うべきと考えていますので、マイグレーションの作成・実行方法をご紹介し...
XServerのSSH接続でPHP5.4ではなくPHP7を指定してbin/console実行... EC-CUBE4はphp7.1以上が必須要件になっており、bin/consoleスクリプトを使う場合はコマンドラインでもPHP7が必要です。 エックスサーバーのようにSSHが接続できるレンタルサーバーでも最初はPHPのバージョンが5.4となっています。ですので、下記の手順に従って、実行できるPHP...
デバッグモードを有効化する方法 .envファイル... EC-CUBE4系をデバッグモードで実行する方法をご紹介します。 デバッグモードとは? EC-CUBE4では通常エラーが発生しても「システムエラーが発生しました。大変お手数ですが、サイト管理者までご連絡ください。」と表示されるだけで原因が全く分かりません。 エラーの原因がユーザーに...
4系で管理画面に新規メニュー項目を追加する方法... 今回は商品管理の一番下に新規メニュー項目を追加することを考えます。 まずメニューから開けるページが必要ですのでコントローラーを作成し、新しいページを作った後でそのページをメニューに追加してみましょう。今回はeccube_nav.yamlを編集するもっとも簡単な方法をご紹介します。 管...