こんにちは、はじめまして。
2010年4月入社しました新人の中嶋です。
まるっきりの未経験で4月からこの世界に飛び込みました。
初心者の私がつまずき、ぶつかった壁についてこれから書いていきたいと思います。よろしくお願いします。
PHPもフレームワークも初めての私は、ただいまSymfony1.4 jobeetのチュートリアルを使い、先輩とアプリケーション制作対決をしています。
今はやっと4日目までたどり着きました!
3日目:データモデルで湧き上がった疑問点をお話しします。
schema.yml作成 actAsってなに??
columnsやrelationsは馴染みのある名称でしたが、テーブルごとの始めに出てくるactAsはなんだろうと。
- Doctrineに搭載されている、ビヘイビア(特定のアクションで起きるオブジェクトの動作)を有効にする機能。actAsでは以下のビヘイビアが設定できます。
名前 | 説明 |
---|---|
Geographical | 緯度と経度をモデルに追加してレコード間のマイル/キロメータを計算する機能を提供する。 |
I18n | モデルに国際化機能を追加する。 |
NestedSet | モデルをtraversableツリーに変換する。 |
Searchable | モデルのデータすべてのインデックスを作成して検索可能にする。 |
Sluggable | slugフィールドをモデルに追加し設定に基づいてスラグを自動的に作成する。 |
SoftDelete | 実際にはレコードを削除しない。代わりにdeletedフラグを設定してクエリのselectからすべてのdeleteされたレコードをフィルタリングする。 |
Timestampable | created_atとupdated_atカラムをモデルに追加し、レコードのinsertとupdateをするときにDoctrineにそれらを設定させる。 |
Versionable | モデルをauditログに切り替えすべての変更を記録する。以前のバージョンに簡単に差し戻しする機能を提供する。 |
今回のjobeetは求人アプリケーションなので、求人情報の作成日時と更新日時を設定するので、Timestampableを使っています。
Jobeetのschema.yml
JobeetCategory:(求人のカテゴリ) actAs: { Timestampable: ~ } columns: name: { type: string(255), notnull: true, unique: true } JobeetJob:(求人) actAs: { Timestampable: ~ } columns: category_id: { type: integer, notnull: true } type: { type: string(255) } company: { type: string(255), notnull: true } logo: { type: string(255) } url: { type: string(255) } position: { type: string(255), notnull: true } location: { type: string(255), notnull: true } description: { type: string(4000), notnull: true } how_to_apply: { type: string(4000), notnull: true } token: { type: string(255), notnull: true, unique: true } is_public: { type: boolean, notnull: true, default: 1 } is_activated: { type: boolean, notnull: true, default: 0 } email: { type: string(255), notnull: true } expires_at: { type: timestamp, notnull: true } relations: JobeetCategory: { onDelete: CASCADE, local: category_id, foreign: id, foreignAlias: JobeetJobs } ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
schema.ymlが書けたので、あとはチュートリアルに沿って、テーブルまで作成できます。
・データベースの作成
$ mysqladmin -u root -p create jobeet
・データベースの指定
$ php symfony configure:database "mysql:host=localhost;dbname=jobeet" root [rootのパスワード]
・モデルを生成
$ ./symfony doctrine:build --model
・SQLを生成
$ ./symfony doctrine:build --sql
・テーブルを生成
$ ./symfony doctrine:insert-sql
テーブルのカラム情報を見てみると…
mysql> describe jobeet_category; +------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+----------------+ | id | bigint(20) | NO | PRI | NULL | auto_increment | | name | varchar(255) | NO | | NULL | | | created_at | datetime | NO | | NULL | | | updated_at | datetime | NO | | NULL | | +------------+--------------+------+-----+---------+----------------+
created_atとupdated_atができています!
actAsを使うと簡単にできるんですね。
そして、直接データベースを操作しなくていいところが安心です。
actAsで使える、その他のビヘイビアも試したいと思います。