新人がSymfony1.4 Jobeetを始めてみました

記事タイトルとURLをコピーする

こんにちは、はじめまして。

2010年4月入社しました新人の中嶋です。

まるっきりの未経験で4月からこの世界に飛び込みました。

初心者の私がつまずき、ぶつかった壁についてこれから書いていきたいと思います。よろしくお願いします。

PHPもフレームワークも初めての私は、ただいまSymfony1.4 jobeetのチュートリアルを使い、先輩とアプリケーション制作対決をしています。

今はやっと4日目までたどり着きました!

3日目:データモデルで湧き上がった疑問点をお話しします。

schema.yml作成 actAsってなに??

columnsやrelationsは馴染みのある名称でしたが、テーブルごとの始めに出てくるactAsはなんだろうと。

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で使える、その他のビヘイビアも試したいと思います。