FuelPHPとCakePHPのhasmanyリレーションドキュメントイメージ

フレームワークを利用するときに便利なことの一つが、DBのリレーション関係です。適切に設定を行えば、複数のテーブルを関連づけて読み込み・保存することが簡単にできるようになるのです。

CakePHPでのhas_manyなどのリレーションについては、ドキュメントが豊富で簡単に出来て、とても便利でした。CakePHPで出来ていたことがFuelPHPでも出来るようなのですが、どうやるのかについて、各種書籍やWeb上の公式ドキュメント、各種サイトを閲覧しても分からず、Coreソースを見たりなんだりして、やっと分かったことについてまとめます。

私は、職業プログラマというわけでもないので、誤りや非効率的な部分があると思います。その点コメントでご指摘頂けるとありがたいです。

今回題材にする例

本エントリーでは、セミナーの開催情報を表示するシステムを例にしてみます。

存在するテーブルは、「開催するセミナーの情報を管理するテーブル」と「そのセミナーの講師を管理するテーブル」です。
これらをそれぞれ、データベース上に「seminar」テーブルと「teacher」テーブルで管理します。

「teacher」テーブルには、「seminar_id」カラムがあり、このカラムの情報で「誰がどのセミナーの講師か」を把握します。

セミナーには複数の講師が担当する場合もありますから、テーブル同士の関係は、「一つのセミナー情報に対して、多数の講師が存在しうる」という形になります。
この関係は、CakePHPでも、FuelPHPでも、「seminar」 has many 「teacher」という形で表されます。

(同じ人が複数のセミナーの講師になることもあるので、HABTMの方がよいのではないかという指摘はもっともですが、ここでは端折ります。)

CakePHPで出来ていたこと

※前提として、私はCakePHP1.3までしかいじったことがありません
CakePHPでは、モデルで「has one」「belongs to」「has many」「HABTM」の設定が可能です(アソシエーション: モデル同士を繋ぐ — CakePHP Cookbook v2.x documentation)。

CakePHPでのモデルの設定

seminarモデルとteacherモデルにそれぞれ以下のような設定を記載します。

View上でのフォームの記載

POSTされた後のコントローラーで処理されて、以下のような配列として格納されます。

Controller上での書き込み方法

FuelPHPで同じ事をやるには?

似たようなことをFuelPHPでやるには、以下のような形になります。

FuelPHPでのモデルの設定

seminarモデルとteacherモデルにそれぞれ以下のような設定を記載します。
CakePHPとやることに大差はありませんが、FuelPHPの方がよりわかりやすいかと思います。Ormパッケージの有効化などを忘れずに行って下さい。

Controller上でのフォームの記載

Viewの書き方については、だいぶ異なります。Fieldsetクラスを用いて、Viewの内容をControllerで書いてそれをViewに渡す形になります。詳細は、各種書籍やサイトをみれば分かるかと思います。

講師の名前部分、第一引数については、このように記載することで、POSTした後、配列として格納されます。

Controller上での書き込み方法

上記のようなフォームでPOSTした後のデータをリレーションに基づきどう書き込むかは以下のようになります。
バリデーションなどは端折っています。

まとめ

説明としてはかなり端折り気味でつたない上に誤っている恐れがありますが、個人的なメモとしても記しておきます。とにかくforgeの引数に格納した配列を渡すことで、リレーションを適切に保ったモデルインスタンスができあがるということです。

FuelPHP関連スライド

最近、僕がハマったFuelPHPの紹介 from Naoto Mawatari

FuelPHP関連書籍

FuelPHPを学ぶに当たって以下の2つの書籍がとても参考になりました。というか、他に書籍あるんでしょうか?

FuelPHP入門
FuelPHP入門
posted with amazlet at 13.02.07
早川 聖司
ソーテック社
売り上げランキング: 25,016

満を持して発売された紙の書籍。入門の名にふさわしくインストールから利用まで、とてもわかり易く書かれている。oilコマンドの使い方なども、書いてある通りやってみて「なるほど」と思えることがあって、FuelPHPの便利さが実感できた。CakePHPのコンソールを全然使ってなかったので、ちゃんと使ってみようと思ったりもした。

ただ、Controller_Templateの使い方が、この本やネットだとよくわからず、下の電子書籍も読んでみた。

はじめてのフレームワークとしてのFuelPHP
鈴木憲治
達人出版会
発行日: 2012-07-02
対応フォーマット: EPUB, PDF

上記紙の書籍を読んで、いろいろいじくってからこの電子書籍を読むと、するすると頭に入ってきた。Controller_Templateの所はこっちのほうが記載が豊富で、やっと理解(ちゃんと動作させることが)できた。まぁ、元ソースを読めという話でもあり、ここらへんは楽をしたい私の性分のせい。それ以外の記述も充実しており、購入者限定のメーリングリストなどもあるようなので、気になる方は上記のリンクから「達人出版会」のページへ。(決済はPaypalのみ。)

最近話題のPHPフレームワーク「FuelPHP」を試してみました記念でエントリー。

私は、ずっと素のPHPか、CakePHPを利用してWebアプリやらサイトやらを作っていたわけなのですが、結構重めのサイトを作る機会が増え、さらにGoogleがサイトの表示速度がSEOに影響すると明言したこともあり、Webアプリ・サイト側の軽量化に取り組んでいました。

CakePHPは、1.3から利用していて、2.0になってだいぶパフォーマンスが改善したのですが、それにしてもやっぱり遅くて、速度の改善ばかりに時間をとられ、機能追加できないわ、イライラするわでした。そんな中、いくつかのアプリが、ちょうどリファクタリングの時期かなとも思っていたので、FuelPHPを試してみた次第です。

試してみた感じ:CakePHPからの移行について

CakePHPとは違うなと感じさせられる反面、MVCモデルという基本構造は同じなので、CakePHPで得た理解が役に立ちます。とはいえ、CakePHPで当然だったことが当然じゃなかったりもして、調べるのに時間を食ってしまうこともあります。

下で紹介している書籍2冊を読みつつ、実際に弄ってみて、全体をおぼろげながら理解してみると、「あぁ、そういうことだったんだ」と納得することが多いです。その段階にいたって、改めて考えると、全体として構成が素直だなと感じることが多いです。

素直なのは理解もしやすいですし、実行速度・開発速度の両方に帰依しているということでしょうか。

FuelPHPの簡単な感想

まず速いですね。これがホントに素敵。余計なものが一切ないという印象。まだやっと全体の構成がつかめた程度なので、なんとも言えないところがあるのですが、全体を理解してみた感じ、とても素直な構成で、ところどころ気が利いてるという感じ。

例えば、CakePHPですとアプリ部分(ROOT/App)とリソース部分(ROOT/App/webroot)が一つのディレクトリ下にあり、オープンなサーバーに設置する際には、public_html以下にwebroot、public_htmlと同位もしくは上位ディレクトリにAppフォルダをとするには、いくつかの手順を踏まなければなりません。まぁ、そんなに大変ではないので別にどっちでもいいのですが、FuelPHPは、最初からアプリ部分とリソース部分が分かれていたりします。合理的でシンプルです。

ただ、やっぱりドキュメントの多さや機能の豊富さでは、Cakeに軍配が上がります。これはしょうがないところなのですが、CakePHPにあったCryptable.Behavior的なものが無いのが困ったところです。ormの設定でなんとか簡単に出来ればよいのですが、そこまではまだ試せてない感じです。

FuelPHPの使い所は?

まぁ、まだ堪能してるわけではないのですが、簡単なアプリから中規模アプリなら、CakePHPよりFuelPHPの方が断然いいと思います。なにより速いので、安いサーバーでもストレスなく動くというのがとても良いです。

MVCの使い方についても、CakePHPを使っている時には、最初結構フリーダムな感じで「お前らのMVCはダメだ」的なエントリーを見て考えなおして変えて…みたいなことをしたりもしていましたが、FuelPHPを利用していると、またMVCモデルというものに対して考えるきっかけになりそうです。

参考になったスライド

最近、僕がハマったFuelPHPの紹介 from Naoto Mawatari

参考になった書籍

以下の2つの書籍がとても参考になりました。というか、他に書籍あるんでしょうか?

FuelPHP入門
FuelPHP入門
posted with amazlet at 13.02.07
早川 聖司
ソーテック社
売り上げランキング: 25,016

満を持して発売された紙の書籍。入門の名にふさわしくインストールから利用まで、とてもわかり易く書かれている。oilコマンドの使い方なども、書いてある通りやってみて「なるほど」と思えることがあって、FuelPHPの便利さが実感できた。CakePHPのコンソールを全然使ってなかったので、ちゃんと使ってみようと思ったりもした。

ただ、Controller_Templateの使い方が、この本やネットだとよくわからず、下の電子書籍も読んでみた。

はじめてのフレームワークとしてのFuelPHP
鈴木憲治
達人出版会
発行日: 2012-07-02
対応フォーマット: EPUB, PDF

上記紙の書籍を読んで、いろいろいじくってからこの電子書籍を読むと、するすると頭に入ってきた。Controller_Templateの所はこっちのほうが記載が豊富で、やっと理解(ちゃんと動作させることが)できた。まぁ、元ソースを読めという話でもあり、ここらへんは楽をしたい私の性分のせい。それ以外の記述も充実しており、購入者限定のメーリングリストなどもあるようなので、気になる方は上記のリンクから「達人出版会」のページへ。(決済はPaypalのみ。)