Skip to content

Latest commit

 

History

History
385 lines (287 loc) · 13.8 KB

File metadata and controls

385 lines (287 loc) · 13.8 KB
layout title
default
データーベースに登録してみよう

{{ page.title }}

本章メニュー

  • 本章では以下を行います。

    1. エンティティマネージャーの取得方法を説明します。

    2. エンティティにデーターを登録する方法を説明しています。

    3. エンティティマネージャーでエンティティを管理する方法を説明します。

    4. エンティティマネージャーで情報を登録する方法を説明します。

エンティティマネージャーを利用した情報の登録

  • 前章では、エンティティの概要と、ファイルの作成方法を説明しました。

  • ここまでの章で、dtb_crudEccube.Entity.Crud.dcm.ymlCrud.phpを作成しました。

  • 作成物が揃ったために、この章では、エンティティマネージャーでデーターベースにデータを登録します。

コントローラーの修正

  • 以下のコントローラーを修正していきます。

    • /src/Controller/Default/CrudController.php
    1. ファイルを開いて以下の様に修正します。

      • CrudController.php
<script src="http://gist-it.appspot.com/https://github.com/EC-CUBE/ec-cube.github.io/blob/master/Source/tutorial_9/CrudController_add_entity.php"></script>
  • 上記の説明を行なっていきます。

保存対象エンティティのインスタンス化

  1. まず前章で作成したエンティティをインスタンス化します。

    • エンティティの作成では、バックスラッシュ + Eccubeからの相対パス + ファイル名(拡張子なし)をnewします。
    • ファイル名(拡張子)以外名前空間で事前に指定していた際は、相対パスは必要ありません。
    use Eccube\Entity\[該当エンティティ名(拡張子なし)]
    
  2. createBuilderの第二引数にインスタンス化したエンティティを渡します。

    • 本操作によって、フォームがエンティティと紐付きフォームデーターの保持が可能になります。
    • ただし、後述するFormTypeの修正リクエストオブジェクトとの結びつけが必要です。
  3. 次に「フォーム情報を整理して入力値チェックも追加しよう」で行なった、リクエストオブジェクトとフォームオブジェクトの結びつけを行います。

    • 説明済みのため、詳細な内容は割愛いたします。
  4. 次に「フォーム情報を整理して入力値チェックも追加しよう」で行なった、サブミット・入力値判定を行います。

    • 説明済みのため、詳細な内容は割愛いたします。

エンティティマネージャーの呼び出しと保存

  1. 判定結果に問題がなかった際は、エンティティマネージャーを呼び出します。

    • エンティティマネージャーの呼び出し
    $app['orm.em']
    
    • 上記でエンティティマネージャーが呼び出せます。
    • 正確にいうと、上記の中にエンティティマネージャーのインスタンスが格納されているため、上記の記述に対して、行いたい処理のメソッドを呼び出すだけとなります。

エンティティマネージャーの管理化にエンティティを登録

  1. 次にエンティティマネージャーに、保存対象エンティティを登録します。
  • エンティティマネージャーへのエンティティ登録
$app['orm.em']->persist([登録エンティティ名称]);
  • 上記でエンティティがエンティティマネージャーの管理下に入りました。
  • 後は後述するflushが呼び出される際に、データーの差分を比較、idの有無を把握し、登録・更新を自動で選択し処理されます。

データーの登録

  1. flushを呼び出せば自動で登録が行われます。
$app['orm.em']->flush([対象エンティティ名称]);
  • 上記で保存が完了しますが、flushの引数に対象エンティティを渡すと、渡したエンティティのみが登録・更新判定の対象となります。

  • 引数を渡さなければ、エンティティマネージャーに登録されているエンティティ全てが対象となります。

  • 今回はリレーションのないデーターの保存のために、あまりDoctrineの利便性は感じにくいかも知れませんが、リレーションデーター(アソシエーションデーター)を扱う際は、定義ファイルに関連を記述し、該当エンティティを登録して、flushするだけで、外部キーも保存されるために、その際には、Doctrineの利便性を享受出来るはずです。

CrudTypeの修正

  • 次にCrudTypeをエンティティに連動させるため、各項目のオプション値を変更します。

    • 保存フォルダ

    • /src/Eccube/Form/Type

    1. 以下の様にファイルを修正します。
    • CrudType.php
<script src="http://gist-it.appspot.com/https://github.com/EC-CUBE/ec-cube.github.io/blob/master/Source/tutorial_9/CrudController_set_map_status.php"></script>
  • 上記の説明

    • ソース上に★印で示した様に、mappedオプションをtrueにする事で、初めてエンティティにフォーム項目がマッピングされます。

表示内容の確認

エラー表示

  • 最後に確認のためにブラウザにアクセスしてみましょう。

    1. ブラウザのURLに「http://[ドメイン + インストールディレクトリ]/tutorial/crud」を入力してください。

    2. 「投稿ハンドルネーム」に「テスト」を入力

    3. 「投稿のタイトル」に「テスト」を入力

    4. 「内容」に「テスト」を入力

    5. この内容で登録するボタンを押下

    6. 以下の内容が表示されます。


入力値を間違えて登録


正常登録時

  • 正常登録時の表示を確認します。

    1. ブラウザのURLに「http://[ドメイン + インストールディレクトリ]/tutorial/crud」を入力してください。

    2. 「投稿ハンドルネーム」に「test」を入力

    3. 「投稿のタイトル」に「テスト」を入力

    4. 「内容」に「テスト」を入力

    5. この内容で登録するボタンを押下

    6. 以下の内容が表示されます。


入力値を間違えて登録


データーベースの内容

  • テーブルにデーターが保存されています。

dtb_bbsの内容


本章で学んだ事

  1. エンティティのインスタンス化の説明を行いました。
  2. エンティティとフォームタイプを紐付ける際の設定方法の説明を行いました。
  3. フォームタイプファイルの修正箇所の説明を行いました。
  4. リクエストオブジェクトとフォームオブジェクトの紐付け方法の説明を行いました。
  5. サブミット・入力値判定の説明を行いました。
  6. エンティティマネージャーへのエンティティの登録の仕方を説明しました。
  7. エンティティマネージャーでの保存方法の説明をしました。
  8. データ登録時の各画面を確認しました。
  9. 登録データーの確認を行いました。