ちいたん天使マジ天使

phpの世界最軽量フレームワークらしい

symfonyデカイ!あんなキャッシュいらない!ドクトリン()笑なので、cheetan使っちゃう。

actionファイルをディレクトリに格納する。O/Rマッピングがシンプルすぎるところが好き。

symfony, ruby on railsみたいなscaffoldはないけど、設計がシンプルだからモジュールごとにコピペ☆して、コミットすればよろし(;・∀・)
CRUDはサンプルの掲示板アプリのソースコードがあるから見てねってへぺろ(棒読み)

ルーティング機能がないよって人は、適当にメソッド追加して自作しろっ☆

railsの「割り切る」っていう冷たいポリシーに反抗してこのcheetanをあるプロジェクトで使った。

結果、ゆるゆるで弄りやすいけどキマリの悪い感じのプロジェクトになったよ!

cheetanのモデルについて

ガードスキル…ディレイ(JOINしまくりまくったことによって)

モデルが実行されるところ

ここで、
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句以下も含む完全なクエリを入れて実行することができる。
ヒャッハー(゚∀゚)/