DooPHPとは、「すんげぇ軽いぞ」というのをうたってるPHPのフレームワークです。作り的には、yiiを安っぽくした感じを受けました。で、その「すんげぇ軽いぞ」を鵜呑みにしたまま、DooPHPをいじくってたのですが、なんせ日本語の資料が皆無のため、英語嫌い(必要なのは重々承知していますが)の私には、ソースコードとにらめっこするしか手段がなく、ORM関連のとこでいろいろと調べたのでメモっておきます(メモなので、ころころ書き換えます。鵜呑みにしないでください)。
まずはじめに
- ModelはDooModelを継承しておく方がいい。
- db.conf.phpにリレーションシップを記述しておく。(has_many, has_one, belongs_to)
Modelの中身
- テーブルのフィールドは、パブリックメンバにしておく
- $_tableにはテーブル名を文字列で設定
- $_primarykeyには主キーを文字列で設定(複合主キーの場合の設定方法がわかりませんでした。)
- $_fieldsには全フィールドを配列で設定
- getVRulesメソッドを作っておくと、validateメソッドを呼び出したときに
指定のルールにしたがって、値を検証してくれる。
データの取得方法 - find
1 2 3 4
| // 一番基本?の使い方 $model->id = 1; // id が 1 のデータを検索・取得する $results = $model->find($option);
|
で、or 検索とか like 検索とかしたいんだけどって場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| // DooDbExpressionの引数 一つ目が値、二つ目がORかどうか、三つ目が値をバインドするかどうか // LIKE検索 $model->id = new DooDbExpression('LIKE xxxxxx'); $results = $model->find($option); // is null検索 $model->id = new DooDbExpression('IS NULL'); $results = $model->find($option); // or 検索 $model->id = new DooDbExpression('IS NULL'); $model->name = new DooDbExpression('IS NULL', true); $results = $model->find($option); // != 検索 $model->id = new DooDbExpression('!= 1', false, true); $results = $model->find($option);
|
##オプションについて
オプション |
設定値 |
select |
SELECT句からFROM句の間の部分を記述 |
limit |
LIMIT句以降の部分を記述 |
where |
WHERE文を記述。(WHERE句は不要) |
filters |
※意外と重要
JOIN句を指定するためのオプション。あらかじめリレーションシップの指定をしておくこと。
結合するテーブルごとに配列で設定する
1 2 3 4 5 6 7 8 9 10 11 12 13
| // model モデル名 もしくは モデルオブジェクト // joinType 結合方法 // where 条件 // param バインドする値 'filters' => array( array('model' => 'Model1') , array('model' => 'Model2', 'joinType' => 'LEFT OUTER', 'where' => 'aaa = ? and ccc = ?', 'param' => array('dddd', 'bbbb')) , array('model' => $model3, 'joinType' => 'INNER') )
|
|
groupby |
GROUP BY文を記述。(GROUP BY句は不要) |
asc |
昇順にしたいフィールドをひとつだけ指定
※descオプションが指定されている場合は、配列の要素の順番にあわせて指定される |
desc | 降順にしたいフィールドをひとつだけ指定
※ascオプションが指定されている場合は、配列の要素の順番にあわせて指定される
|
custom | なんでもいれることができる。ただし、他のオプションとの兼ね合いがある。
主な使い方は、ORDERの指定に使うかな(この場合は、asc、descオプションは指定しない)?
|
asArray | boolean値で指定。trueの場合、配列で結果が返ってくる
|
##データの取得方法 - getほにゃらら
1 2 3 4 5 6 7
| // getByにつづけてフィールド名を記載する。 // フィールド名は _ で複数指定することができる $model->getByField1(1); $model->getByField1_Field2(1, 'aaa'); $model->getByField1_Field2_Field3(1, 'aaa', 'bbbb'); // _firstをつけると先頭の一行だけを取得する。 $model->getByField1_first(1);
|
##データの取得方法 - relateほにゃらら
1 2 3 4 5 6 7 8
| // relateにつづけてモデルのクラス名を記載する。 $model->relateModelClassName(); // 引数には、モデルのオブジェクトもしくはオプション配列を設定できる $model->relateModelClassName($model); $model->relateModelClassName($option); $model->relateModelClassName($model, $option); // _firstをつけると先頭の一行だけを取得する。 $model->relateModel2_first();
|
##データの取得方法 - relateMany
1 2 3 4 5 6 7
| // 複数のリレーションをまとめて取得したい場合に使う $model->relateMany(array('Model1','Model2','Model3'), $option); // オプションの指定は、それぞれのリレーションするモデルごとに記述する必要がある $option = array ( 'Model1' => array('where' => 'xxxxxx') , 'Model2' => array('where' => 'xxxxxx') );
|
relateManyは、まとめて結合するイメージではなく、ひとつづつ結合した結果をプログラムで組み合わせてるようです。スピードを重視するならあまり使わないほうがいいかもしれないです。