注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

淘尽网 官方博客

淘尽网http://www.tao3w.com做最好的比价网站

 
 
 

日志

 
 
关于我

淘尽网 http://www.tao3w.com 做最好的比价网站,做最好的数据抓取专家。

网易考拉推荐

DooPHPのORMについてのメモ  

2014-01-12 12:38:13|  分类: DooPhp |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
DooPHPとは、「すんげぇ軽いぞ」というのをうたってるPHPのフレー ムワークです。作り的には、yiiを安っぽくした感じを受けました。で、その「すんげぇ軽いぞ」を鵜呑みにしたまま、DooPHPをいじくってたのです が、なんせ日本語の資料が皆無のため、英語嫌い(必要なのは重々承知していますが)の私には、ソースコードとにらめっこするしか手段がなく、ORM関連の とこでいろいろと調べたのでメモっておきます(メモなので、ころころ書き換えます。鵜呑みにしないでください)。



まずはじめに

?ModelはDooModelを継承しておく方がいい。
?db.conf.phpにリレーションシップを記述しておく。(has_many, has_one, belongs_to)

Modelの中身

?テーブルのフィールドは、パブリックメンバにしておく
?$_tableにはテーブル名を文字列で設定
?$_primarykeyには主キーを文字列で設定(複合主キーの場合の設定方法がわかりませんでした。)
?$_fieldsには全フィールドを配列で設定
?getVRulesメソッドを作っておくと、validateメソッドを呼び出したときに
指定のルールにしたがって、値を検証してくれる。

データの取得方法 - find

// 一番基本?の使い方
$model->id = 1;
// id が 1 のデータを検索?取得する
$results = $model->find($option);
で、or 検索とか like 検索とかしたいんだけどって場合
// 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);

オプションについて

オプション 設定値
selectSELECT句からFROM句の間の部分を記述
limitLIMIT句以降の部分を記述
whereWHERE文を記述。(WHERE句は不要)
filters※意外と重要
JOIN句を指定するためのオプション。あらかじめリレーションシップの指定をしておくこと。
結合するテーブルごとに配列で設定する
// 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')
)
groupbyGROUP BY文を記述。(GROUP BY句は不要)
asc昇順にしたいフィールドをひとつだけ指定 ※descオプションが指定されている場合は、配列の要素の順番にあわせて指定される
desc降順にしたいフィールドをひとつだけ指定 ※ascオプションが指定されている場合は、配列の要素の順番にあわせて指定される
customなんでもいれることができる。ただし、他のオプションとの兼ね合いがある。 主な使い方は、ORDERの指定に使うかな(この場合は、asc、descオプションは指定しない)?
asArrayboolean値で指定。trueの場合、配列で結果が返ってくる

データの取得方法 - getほにゃらら

// getByにつづけてフィールド名を記載する。
// フィールド名は _ で複数指定することができる
$model->getByField1(1);
$model->getByField1_Field2(1, 'aaa');
$model->getByField1_Field2_Field3(1, 'aaa', 'bbbb');

// _firstをつけると先頭の一行だけを取得する。
$model->getByField1_first(1);

データの取得方法 - relateほにゃらら

// relateにつづけてモデルのクラス名を記載する。
$model->relateModelClassName();

// 引数には、モデルのオブジェクトもしくはオプション配列を設定できる
$model->relateModelClassName($model);

$model->relateModelClassName($option);

$model->relateModelClassName($model, $option);

// _firstをつけると先頭の一行だけを取得する。
$model->relateModel2_first();

データの取得方法 - relateMany

// 複数のリレーションをまとめて取得したい場合に使う
$model->relateMany(array('Model1','Model2','Model3'), $option);

// オプションの指定は、それぞれのリレーションするモデルごとに記述する必要がある
$option = array (
'Model1' => array('where' => 'xxxxxx')
, 'Model2' => array('where' => 'xxxxxx')
);
relateManyは、まとめて結合するイメージではなく、ひとつづつ結合した結果をプログラムで組み合わせてるようです。スピードを重視するならあまり使わないほうがいいかもしれないです。
  评论这张
 
阅读(182)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017