MVCフレームワークでは、データベースとのやりとりはモデルが行い、symfonyの場合はPropelがモデルの役割をこなします。データベースの設定からモデルの作成まで、参考書等の文献で紹介されている方法としては、以下の2パターンがあります。
実際に開発で使用した感触としては、スキーマ定義ファイルは書式にクセがあるため、テーブル数が多い大型案件などの場合は定義ファイルを作成するだけでかなりの時間が掛かるため、パターンBの方法が良いです。
これまでに開発経験がある場合は、データベース・テーブルを効率的に作成するノウハウがあると思いますので、まずは既存の方法でデータベースとテーブルの作成を行ってしまいましょう。
その後、symfonyコマンドでスキーマ定義ファイルを作成するための設定ファイルの編集を行います。
データベースに関連する設定ファイルは、/プロジェクト/config/配下の以下3ファイルつです。
データベースに関連する3つの設定ファイル
① propel.ini
symfonyコマンドを実行する際のデータベース設定を記述します。多くの設定項目がありますが、基本的に変更するのは以下の行のみです。
※propel.ini変更箇所
propel.targetPackage = lib.model.db
↑DBが1つの場合は変更不要。複数の場合はdb1、db2などにする
propel.project = idol-mile
↑プロジェクト名に変更
propel.database = pgsql
↑使用するデータベースドライバに変更MySQLの場合は mysql
propel.database.createUrl = pgsql://postgres@210.255.***.***/
↑接続先のデータベースサーバの環境に変更
propel.database.url = pgsql://postgres@210.255.***.***/member_db
↑接続先のデータベース環境に変更
② database.yml
プログラムからデータベースに接続する際の設定を記述します。symfonyコマンドでは使用しませんが、編集内容はpropel.iniとほぼ共通なためこの段階で設定を行っておきます。
デフォルトでは全てコメントアウトされているため、コメントアウトを外して適切な記述に変更を行います。
※記述例
all:
propel:
class: sfPropelDatabase
param:
dsn: pgsql://postgres@210.255.***.***/member_db ←接続先のデータベース環境に変更
encoding: utf8 ←接続先データベースのエンコーディングに変更
③ schema.yml
symfonyコマンドでモデルを生成する際に参照するデータベース定義ファイルです。デフォルトでは空のファイルになっています。YAMLの書式に合わせて1から記述することもできますが、symfonyコマンドでの自動生成機能を使用した方が効率的なため、ここでは編集は行いません。(詳細は手順2~3で)
モデルの作成に必要なスキーマ定義ファイルの作成を行います。
・コマンドラインのプロジェクトディレクトリに移動し、以下のコマンドを実行
$ symfony propel-build-schema
成功すると、/プロジェクト/config/配下に schema.ymlファイルが生成されます。ファイルが生成されない場合は propel.iniの設定を再確認してください。
プログラムから参照するモデルクラスの一括生成を行います。
・コマンドラインのプロジェクトディレクトリに移動し、以下のコマンドを実行
$ symfony propel-build-model
↑モデルクラス作成コマンド
$ symfony propel-build-sql
↑テーブル作成時のSQLを出力
$ symfony propel-insert-sql
↑テーブルのdropと再作成を行う
注釈
★複数のデータベースが存在する場合は、propel.ini と database.yml に特殊な記述が必要になります。
記述方法については、プログラマーの開発メモを参照。
モデルクラスの作成が完了したら、実際にデータベースに登録・削除・変更などを行うプログラムを作成します。
まずはsymfonyコマンドで器となるモジュールを作成します。
・コマンドラインのプロジェクトディレクトリに移動し、以下のコマンドを実行
$ symfony propel-generate-crud [アプリケーション名] [モジュール名] [モデルクラス名]
→成功すると、指定したモジュールディレクトリの配下にアクション、ビューなどのディレクトリが作成され、この時点データの一覧・登録・変更・削除を行うためのコードも生成されます。
例)sampleアプリケーション内に会員データ閲覧用プログラムを作成する場合
$ symfony propel-generate-crud sample member MemberMst
→成功すると指定したモジュールの配下にアクションとテンプレートファイルが生成され、http://www.***.***/memberでブラウザから会員データ閲覧用画面にアクセスできるようになります。
また、いきなりデザイン付きで画面を生成できるadminコマンドもあります。
デザイン付きモジュール作成コマンド
$ symfony propel-init-admin [アプリケーション名] [モジュール名] [モデルクラス名]
上記は1つのデータベースへの参照・更新を目的として作成するため、生成された時点で既にある程度のコードが記述されていますが、モジュールの器のみ作成するコマンドもあります。基本的に、複雑な処理を行うモジュールの場合はこちらを使います。
空モジュール作成コマンド
$ symfony init-module [アプリケーション名] [モジュール名]
symfonyでは、モデルやモジュールのリストをキャッシュで保持しているため、新規でモジュールや設定ファイルを作成した場合は、以下のコマンドでキャッシュをクリアする必要があります。
キャッシュクリアコマンド
$ symfony cc