CakePHP1.2 モデルのデータをオブジェクトで扱う
少し前ですが下記の投稿を読んでちょっと興味があり色々と試してみました。
“取得データを配列からオブジェクトに変換” フォーラム – CakePHP Users in Japan
I want objects, not arrays! ? nuts and bolts of cakephp
モデルに下記のようなコードを書けばデータを取得するとオブジェクトとして扱えるということです。
function afterFind($results, $primary = false) { if($primary == true && !is_object($results)) { return Set::map($results); } }
ただこれだとCakePHP1.2 で大変使いやすくなった paginate とかが使えなくなる。
そこで、モデルにオブジェクトに変換するメソッドを書いて必要なときにオブジェクトに変換して使ってみた。
function toObject($data=null) { if(!is_null($data)) { return Set::map($data); } }
取得したモデルのデータをオブジェクトで扱いたいときに上記メソッドを呼べばオブジェクトになる。
$data = $this->Model->find(); $object = $this->Model->toObject($data);
さらにオブジェクトに変換するコードを下記のようにする。
function toObject($data=null) { if(!is_null($data)) { return Set::map($data, get_class($this)); } }
Set::map は2番目の引数にクラス名を指定するとそのクラスのオブジェクトを返してくれます。(デフォルトは stdClass クラスです。)
こうしておけば、モデルで定義したメソッドなども使用できるのでもう少し使い道が広がるかも。
私は個人的にはモデルで取得したデータは配列でいいと思うのですが、あるプロジェクトでモデルのデータをオブジェクトで扱いたいという要件があったもので試してみました。
※試したバージョンは 1.2.0.6311 beta です。まだ RC1 は試してません。。。
関連する投稿
コメントをどうぞ
Additional comments powered by BackType