今回は非常に要望が多かった新しいテーブルを作ってエンティティとしてデータ取得をできるようにする方法をご紹介します。
この方法は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のよ...
商品一覧のページネーションに「最初へ」「最後へ」を表示する方法... 商品一覧ページのページネーションはProduct/list.twigを見るとpagination.twigをインクルードすることで表示されています。 pagination.twigをのぞいて見ると「最後へ」の部分は次のようなコードが書かれています。 このリンクを表示するにはconfi...
ドクトリンで用いられるエンティティとレポジトリとは?... EC-CUBE3やEC-CUBE4で開発を行なっていると必ず耳にするのがドクトリンやエンティティ、レポジトリといったデータベース周りの用語です。 ECサイトはデータベースと密接に関係しているため、これらを用いずにEC-CUBEの開発を行うことは不可能です。 エンティティとレポジトリとは? ...