今回は非常に要望が多かった新しいテーブルを作ってエンティティとしてデータ取得をできるようにする方法をご紹介します。
この方法は3系のもので、まもなくリリースされるEC-CUBE4系では利用できませんのでご注意ください。

  1. データベースの作成
  2. ドクトリン定義ファイルの作成(dcm.ymlファイル)
  3. エンティティクラスファイルの作成
  4. レポジトリクラスの作成
  5. データの追加と取得

1. データベースの作成

マイグレーションでもphpMyAdminでもschema updateでも構わないので、とにかくテーブルを作成します。

 

2. ドクトリン定義ファイルの作成(dcm.ymlファイル)

データベースからエンティティに同期するカラムの情報を記載します。

3. エンティティクラスファイルの作成

src/Eccube/Entity/Test.phpを作成します。

dcm.ymlで定義したカラムをprivateなプロパティとして設定し、それぞれゲッターセッターを用意します。

 

4. レポジトリクラスファイルの作成

src/Eccube/Repository/TestRepository.phpを作成します。

最初は空っぽで構いませんが、システムの開発に応じてエンティティの取得・更新を行うメソッドを追加していきます。

 

これでデータベースとエンティティの紐付けは完了です。Testエンティティを使用してdtb_testテーブルへデータを登録したり、$app[‘orm.em’]->getRepository(‘Eccube\Entity\Test’)->find(1)といったようにデータの取得が可能になります。

5. データの追加と取得

マイグレーション等で1つデータを追加してみましょう。dtb_testにID1の行が追加されます。マイグレーションが作成できない場合phpMyAdminから追加すれば同じことです。

TopController::indexメソッドあたりに次のコードを書いてみてください。トップページの画面にデータが表示されていれば成功です。

dump($app[‘orm.em’]->getRepository(‘Eccube\Entity\Test’)->findOneBy(array()));

 

関連するカスタマイズ

findByの便利な使い方を紹介! AND検索、OR検索、並び順、件数... EC-CUBE3ではSQLを自分で書くことはほとんどありません。代わりに世界的なORM - Object Relational MapperであるDoctrine(ドクトリン)をフルに活用しています。 Doctrineで必ずといっていいほど使用するfindBy(findOneBy)メソッドにつ...
Doctorineで設定できるフィールドタイプ... EC-CUBE3が採用しているSymfonyの標準ORM、Doctorineで設定できるフィールドタイプをまとめました。 EC-CUBE3で開発するならこれはもう覚えちゃっても良いかもしれませんね。 dcm.ymlやマイグレーションで頻繁に使いますからね。 stringやintegerのよ...
Twig内で文字列の一部分を切り出す方法 Slice使用... twigテンプレート内で文字列の一部を切り出したい時があります。 そんな時はsliceフィルタを使用してtwig内だけで切り出しを実行することが可能です。 2文字目以降を切り出す(1文字目を削除) sliceフィルタの第1引数は開始位置です。 sliceフィルタにはシンタックスシ...
基本税率を切り捨て、切り上げ、四捨五入に変更... 開発メンバー全員のルールを揃えておくことが重要です。 dtb_tax_ruleテーブルのcalc_ruleの設定値は次の表の通りです。 calc_rule 方式 1 四捨五入 2 切り捨て 3 切り上げ これをマイグレーションで...