ちいたん天使マジ天使
phpの世界最軽量フレームワークらしい
symfonyデカイ!あんなキャッシュいらない!ドクトリン()笑なので、cheetan使っちゃう。
actionファイルをディレクトリに格納する。O/Rマッピングがシンプルすぎるところが好き。
symfony, ruby on railsみたいなscaffoldはないけど、設計がシンプルだからモジュールごとにコピペ☆して、コミットすればよろし(;・∀・)
CRUDはサンプルの掲示板アプリのソースコードがあるから見てねってへぺろ(棒読み)
ルーティング機能がないよって人は、適当にメソッド追加して自作しろっ☆
railsの「割り切る」っていう冷たいポリシーに反抗してこのcheetanをあるプロジェクトで使った。
結果、ゆるゆるで弄りやすいけどキマリの悪い感じのプロジェクトになったよ!
モデルが実行されるところ
ここで、 script/cheetan/dispatcher.php DB接続クラスが呼ばれて、 $db = new CDatabase(); でぃすぱっち。 function dispatch() そのあと、これ。 $controller->SetDatabase($db)
SQLクエリはどういう流れで実行されるか
DBへのクエリは、例えば、このアクションのファイルから、 script/actions/index.php このように実行されており、 $c->set("datas", $c->t_campaign->find("", "modified DESC")); このテーブルと関連するモデルが、 script/models/t_campaign.php 親クラスにあるメソッド script/cheetan/model.php このfindを呼ぶ。 function find( $condition = "", $order = "", $limit = "", $group = "" ) このメソッドの中の、findallは、 return $this->db->findall( $this->table, $condition, $order, $limit, $group, $this->name ); このクラスのfindallを呼ぶ。 script/cheetan/database.php これね。 function findall( $table, $condition = "", $order = "", $limit = "", $group = "", $name = "" ) このメソッドの中のこの行は、 $this->driver[$this->config[$name]->kind]->findall( $this->connect[$name], $table, $condition, $order, $limit, $group ); このDBごとの違いを吸収するクラスのfindallを呼ぶ。 script/cheetan/db/common.php これね。 function findall( $connect, $table, $condition = "", $order = "", $limit = "", $group = "" ) このメソッドの中で、"SELECT * FROM $table"の部分のクエリを組み立て、 $this->GetFindQueryで、WHERE句以下を組み立て、 このfindは、 return $this->find( $query, $connect ); このファイルの中にあるfindを呼ぶ。 script/cheetan/db/mysql.php これね。 function find( $query, $connect ) これは、使っているDBがMySQLなので、MySQL用のクラスを呼ぶようになっている。
例えば、JOINしまくりまくりでWHERE句もごっそり条件があるようなSELECT文を書きたい場合、(クズSQLだがECとか業務系に多いパターンで仕事だからしょうがない)
例えばこのアクションで、 script/actions/index.php このように書くと、 $c->set("datas", $c->t_campaign->findquery("SELECT * FROM t_campaign", "id=$id", "modified DESC")); このファイルのfindqueryが呼ばれて、 script/cheetan/model.php これね。 function findquery( $query, $condition = "", $order = "", $limit = "", $group = "" ) このメソッドは、このファイルの、 script/cheetan/database.php この行で、findqueryを呼ぶ。 return $this->db->findquery( $query, $condition, $order, $limit, $group, $this->name ); これね。 function findquery( $query, $condition = "", $order = "", $limit = "", $group = "", $name = "" ) このDBごとの違いを吸収するクラスのfindqueryを呼ぶ script/cheetan/db/common.php これが、 return $this->driver[$this->config[$name]->kind]->findquery( $this->connect[$name], $query, $condition, $order, $limit, $group ); こいつを呼びます。 function findquery( $connect, $query, $condition = "", $order = "", $limit = "", $group = "" ) SELECT文が格納された$queryを引数にとったまま、クエリ実行処理をしており、 第3引数の$condition以降の引数は無くてもよいメソッドとなっているので、 $queryの中に、JOINしまくりまくってWHERE句以下も含む完全なクエリを入れて実行することができる。 ヒャッハー(゚∀゚)/