Doctrineいれてみる with zend
( Doctrine )doctrineを入れてみる。
久々にPHPでORMらしいツールがでましたね。 Hibernateをインスパイアされたものらしいので結構使えそうかも って思ってインストールしてみました。
ちなみに今は、ZendFrameworkを使っていたのでそこに組み込んでみることにする。
Doctrine is an object relational mapper (ORM) for PHP 5.2.3+ that sits on top of a powerful database abstraction layer (DBAL). One of its key features is the option to write database queries in a proprietary object oriented SQL dialect called Doctrine Query Language (DQL), inspired by Hibernates HQL. This provides developers with a powerful alternative to SQL that maintains flexibility without requiring unnecessary code duplication.
まずはダウンロード。
http://www.doctrine-project.org/download
ディレクトリ配置は application/data application/data/sql application/data/ficture application/migrations application/schema application/scripts
ライブラリ関連は「lib」ディレクトリ以下に配置。 library/doctrine/Docrine.php library/doctrine/Docrine
配置が完了したらindex.phpにdoctrineの設定を記述します。
/-----------------------------------------------------------
// setting Doctrine
//-----------------------------------------------------------
/*
* Set super-global data
*/
Doctrine_Manager::connection("mysql://user:pass@192.168.0.10/dbname");
/*
* Configure Doctrine
*/
Zend_Registry::set('doctrine_config', array(
'data_fixtures_path' => APPLICATION_PATH . '/doctrine/data/fixtures',
'models_path' => APPLICATION_PATH . '/models',
'migrations_path' => APPLICATION_PATH . '/doctrine/migrations',
'sql_path' => APPLICATION_PATH . '/doctrine/data/sql',
'yaml_schema_path' => APPLICATION_PATH . '/doctrine/schema'
));
本当はBootstrapにプラグインとして組み込めばいいんですけど、本筋じゃないのでここでは割愛。 もっといってみると、この場合負荷の分散になっていなからごねごねしなきゃいけない。
次はスキーマを作成します。 このスキーマを通してSQLを作成したり、モデルクラスを作成するためのファイルです。
とりあえず、こんな感じで作ってみます。 ファイル名は「schema.yaml」です。
User:
columns:
username: string(256)
password: string(256)
relations:
Groups:
class: Group
refClass: UserGroup
foreignAlias: Users
Phonenumber:
columns:
user_id: integer
phonenumber: string(26)
relations:
User:
foreignAlias: Phonenumbers
onDelete: CASCADE
Group:
tableName: groups
columns:
name: string(256)
UserGroup:
columns:
user_id:
type: integer
primary: true
group_id:
type: integer
primary: true
relations:
User:
foreignAlias: UserGroups
onDelete: CASCADE
Group:
foreignAlias: UserGroups
onDelete: CASCADE
※作ってみたのはいいけどテーブル大きくなってきたら大変だなーって思ってたら カレントディレクトリ内のファイルはおいてあれば見に行く仕様になっていたので 一安心でした。
そこからdoctrineコマンドを通してモデルクラス、並びにSQLを作成してDBに設定を反映させてみます。 この一連の作業がコマンド3発で来てしまうのがうれしいものですね。
# ./doctrine-cli.php generate-models-yaml generate-models-yaml - Generated models successfully from YAML schema # ./doctrine-cli.php generate-sql generate-sql - Generated SQL successfully for models # ./doctrine-cli.php create-tables create-tables -
これからはコントローラーで処理してみます。
