| layout | title |
|---|---|
default |
データーベースに登録してみよう |
-
本章では以下を行います。
-
エンティティマネージャーの取得方法を説明します。
-
エンティティにデーターを登録する方法を説明しています。
-
エンティティマネージャーでエンティティを管理する方法を説明します。
-
エンティティマネージャーで情報を登録する方法を説明します。
-
-
前章では、エンティティの概要と、ファイルの作成方法を説明しました。
-
ここまでの章で、dtb_crud、Eccube.Entity.Crud.dcm.yml、Crud.phpを作成しました。
-
作成物が揃ったために、この章では、エンティティマネージャーでデーターベースにデータを登録します。
-
以下のコントローラーを修正していきます。
- /src/Controller/Default/CrudController.php
-
ファイルを開いて以下の様に修正します。
- CrudController.php
- 上記の説明を行なっていきます。
-
まず前章で作成したエンティティをインスタンス化します。
- エンティティの作成では、バックスラッシュ + Eccubeからの相対パス + ファイル名(拡張子なし)をnewします。
- ファイル名(拡張子)以外を名前空間で事前に指定していた際は、相対パスは必要ありません。
use Eccube\Entity\[該当エンティティ名(拡張子なし)] -
createBuilderの第二引数にインスタンス化したエンティティを渡します。
- 本操作によって、フォームがエンティティと紐付きフォームデーターの保持が可能になります。
- ただし、後述するFormTypeの修正とリクエストオブジェクトとの結びつけが必要です。
-
次に「フォーム情報を整理して入力値チェックも追加しよう」で行なった、リクエストオブジェクトとフォームオブジェクトの結びつけを行います。
- 説明済みのため、詳細な内容は割愛いたします。
-
次に「フォーム情報を整理して入力値チェックも追加しよう」で行なった、サブミット・入力値判定を行います。
- 説明済みのため、詳細な内容は割愛いたします。
-
判定結果に問題がなかった際は、エンティティマネージャーを呼び出します。
- エンティティマネージャーの呼び出し
$app['orm.em']- 上記でエンティティマネージャーが呼び出せます。
- 正確にいうと、上記の中にエンティティマネージャーのインスタンスが格納されているため、上記の記述に対して、行いたい処理のメソッドを呼び出すだけとなります。
- 次にエンティティマネージャーに、保存対象エンティティを登録します。
- エンティティマネージャーへのエンティティ登録
$app['orm.em']->persist([登録エンティティ名称]);
- 上記でエンティティがエンティティマネージャーの管理下に入りました。
- 後は後述するflushが呼び出される際に、データーの差分を比較、idの有無を把握し、登録・更新を自動で選択し処理されます。
- flushを呼び出せば自動で登録が行われます。
$app['orm.em']->flush([対象エンティティ名称]);
-
上記で保存が完了しますが、flushの引数に対象エンティティを渡すと、渡したエンティティのみが登録・更新判定の対象となります。
-
引数を渡さなければ、エンティティマネージャーに登録されているエンティティ全てが対象となります。
-
今回はリレーションのないデーターの保存のために、あまりDoctrineの利便性は感じにくいかも知れませんが、リレーションデーター(アソシエーションデーター)を扱う際は、定義ファイルに関連を記述し、該当エンティティを登録して、flushするだけで、外部キーも保存されるために、その際には、Doctrineの利便性を享受出来るはずです。
-
次にCrudTypeをエンティティに連動させるため、各項目のオプション値を変更します。
-
保存フォルダ
-
/src/Eccube/Form/Type
- 以下の様にファイルを修正します。
- CrudType.php
-
-
上記の説明
- ソース上に★印で示した様に、mappedオプションをtrueにする事で、初めてエンティティにフォーム項目がマッピングされます。
-
最後に確認のためにブラウザにアクセスしてみましょう。
-
ブラウザのURLに「http://[ドメイン + インストールディレクトリ]/tutorial/crud」を入力してください。
-
「投稿ハンドルネーム」に「テスト」を入力
-
「投稿のタイトル」に「テスト」を入力
-
「内容」に「テスト」を入力
-
この内容で登録するボタンを押下
-
以下の内容が表示されます。
-
-
正常登録時の表示を確認します。
-
ブラウザのURLに「http://[ドメイン + インストールディレクトリ]/tutorial/crud」を入力してください。
-
「投稿ハンドルネーム」に「test」を入力
-
「投稿のタイトル」に「テスト」を入力
-
「内容」に「テスト」を入力
-
この内容で登録するボタンを押下
-
以下の内容が表示されます。
-
- テーブルにデーターが保存されています。
- エンティティのインスタンス化の説明を行いました。
- エンティティとフォームタイプを紐付ける際の設定方法の説明を行いました。
- フォームタイプファイルの修正箇所の説明を行いました。
- リクエストオブジェクトとフォームオブジェクトの紐付け方法の説明を行いました。
- サブミット・入力値判定の説明を行いました。
- エンティティマネージャーへのエンティティの登録の仕方を説明しました。
- エンティティマネージャーでの保存方法の説明をしました。
- データ登録時の各画面を確認しました。
- 登録データーの確認を行いました。


