ハマりポイント

Akelosは、全くもって素直に動いてくれますが、ちょっとハマったこともあったので、レポート。AkActiveRecordが、ややウルサイ。

Akelos歴、1週間目。
ユーザーはまだ少ないとは思うのだけど、本当に良い。実に良い。
なんでユーザー少ないのかワカラン。CakePHPで作ってたときの倍のスピードで開発が進んでいる(おおげざじゃないですよ)。

だからこそ、触り始めた人が、「えー、動かないじゃーん」と去ってしまうのは避けたいのです。そこで、ここ1週間でハマッたこと、レポートしておきます。アカを出しておいた方が不安を払拭できると思いまして。

小数が消える・・

小数を使いたくて、テーブルカラムに、

 create table XXXXX (
  rate decimal(5,2)
 );

とか定義しても、AkActiveRecordによって、整数に(切捨て)されてしまいます。小数点を使うときは、テーブルカラム型を、float/doubleで定義すること。

 create table XXXXX (
  rate float(5,2)
 );

SQL←→ActiveRecordの型変換は、AkActiveRecord::getAkelosDataTypeに集約されています。ソースなりコメントは一度読んでおきましょう。SQL decimalはPHP integerにマッピングされてます。

limit offset が消える・・

ページネートをやりたいときに、

 $per_page = "10";
 $page = "1";
 $posts = $this->Post->find('all',
  array("limit"=>$per_page,"offset"=> $page*$per_page ) );

などとやると思いますが、
limitとoffsetは、is_integer()==trueでなければなりません。falseだと、limit/offsetのSQL文自体が生成されません。
だから、こうしないと、ダメです。

 $posts = $this->Post->find('all',
  array("limit"=>intval($per_page),"offset"=> intval($page*$per_page) ) );

(コレは若干むなしい。「暗黙の型変換」を大事にしないなんて、ちょっとヨロシクないんじゃね?)

LAZYロードできない

Akelosは、CakePHPのようなEAGERロードはしませんが、RailsやJavaのようなアクセス時の自動LAZYロードもしません。
これは仕様だから、慣れるしかない。

Viewで必要なデータは、しっかりとControllerで準備しましょう。

 Post hasMany Comment の場合のModelは、

 class Post extends ActiveRecord{
  var $has_many = 'comments';
 }
 class Comment extends ActiveRecord{
  var $belongs_to = 'post';
 }

Controllerでは、

 $this->post = $this->Post->find(1);
 $this->post->comment->load();

 あるいは、

 $this->post = $this->Post->find(1, array("include"=>"comment"));
 $comments = $post->comments;

など。commentだったりcommentsだったり紛らわしいですが、
$post->commentがデータ・アクセス・オブジェクト、
$post->commentsがデータ配列です。

 print_r( $post );

の出力を、1回軽く読んでおくとわかりやすい。

ファイルアップロードできない。

サーバがWindowsのときだけの話。以下をコメントアウトしとけ!

 AkRequest::_fixGpcMagic()

 line:680
 //!empty($_FILES)? array_walk($_FILES,array('AkRequest','_fixGpc')):null;


以上かしら?
それなりに複雑なアプリケーション作っていて、結構いろいろなことやってますが、イラっとした点は、そんなもん。

ぜんぜんバギーじゃないです。気軽に使ってみてはどーでしょうか。


コメント

コメントしてください
お名前:
入力しなければ「匿名さん」。20字以内。

メール:
入力しても表示しません

URL:
入力すればリンクが貼れます


コメント: