zentaoPHP框架提供的DAO功能

2018-10-11 10:02 更新

一、關(guān)于DAO的說明

zentaoPHP并沒有試著去實(shí)現(xiàn)ORM或者ActiveRecord這樣的概念。因?yàn)槲覀兿嘈?,框架要留給開發(fā)人員足夠的自由發(fā)揮的空間,而不是所有的都要包辦。所以框架里面提供了一個(gè)簡(jiǎn)單方便的數(shù)據(jù)庫訪問對(duì)象類DAO。并且我們?cè)诜庋bDAO的時(shí)候盡可能的兼容標(biāo)準(zhǔn)的sql寫法。

DAO類的定義在lib下面的dao.class.php中??蚣茉诩虞d的時(shí)候,會(huì)自動(dòng)生成$this->dao對(duì)象,可以在control, model或者view層的代碼中直接使用$this->dao來執(zhí)行各種方法。

二、執(zhí)行方法的區(qū)別

如果是查詢類的語句,需要使用fetch系列的方法來返回?cái)?shù)據(jù)。更新,刪除,替換這些方法可以使用exec()方法。

DAO在后執(zhí)行的時(shí)候,有下面的方法:

fetch():         獲得滿足條件的第一次記錄,返回的是對(duì)象格式。
fetch($filed):  獲得滿足條件的第一個(gè)記錄的字段$field對(duì)應(yīng)的值。
fetchAll():     獲得滿足條件的所有記錄,以數(shù)組格式返回,索引為0-n
fetchAll($key):  獲得滿足條件的所有記錄,并使用字段$key作為索引值。
fetchPairs($key, $value): 返回鍵值對(duì)的列表。如果不指定參數(shù),則取返回記錄中的第一個(gè)字段作為key,第二個(gè)字段作為value。
fetchGroup($group, $key): 把滿足條件的記錄按照$group字段進(jìn)行分組。比如把所有$status=active的放在一起。

三、操作符說明

為了書寫的方便,DAO類里面封裝了若干操作符:

eq: equal,等于
ne: not equal,不等于
gt: great than, 大于
lt: little than, 小于
in: 介于一個(gè)列表中。
between: 在一個(gè)區(qū)間中。
notin:不在一個(gè)列表中。
like: 模糊匹配。

四、查詢語句:

普通的查詢:查詢account=wwccss的記錄。

$this->dao->select('*')
->from('user')
->where('account')
->eq('wwccss')
->fetch();
再?gòu)?fù)雜一點(diǎn),加入andWhere (或者orWhere)
$this->dao->select('*')->from('user')
->where('id')->gt(10)
->andWhere('age')->lt(20)
->orderBy('id desc')
->limit('1,10')
->fetchAll()

左連接查詢

$this->dao->select('t1.*, t2.*')->from('user')->alias('t1')->leftJoin('userGroup')->alias('t2')->on('t1.account = t2.account')->fetchAll();
其他便利的方法:
$this->dao->findByAccount($account)->from('user')->fetch();               // 魔術(shù)方法,按照account進(jìn)行查詢。
$this->dao->select('*')->from('user')->fetchAll('account');              // 返回的結(jié)果中,以account為key。
$this->dao->select('account, realname')->from('user')->fetchPairs();     // 返回account=>realname的鍵值對(duì)。
$this->dao->select('class, account, realname')->from('user')->fetchGroup('class');     // 按照所屬的class進(jìn)行分組
根據(jù)條件拼裝SQL:beginIF, FI()
$this->dao->select('*')->from('user')->where('id')->gt(10)->beginIF($class == 'online')->andWhere('status')->eq('online')->fi()->fetchAll();

五、插入語句:

使用一個(gè)data對(duì)象來更新。data對(duì)象的key對(duì)應(yīng)到數(shù)據(jù)表中字段名。

$user->account = 'wwccss';
$user->password = '123456';
$this->dao->insert('user')->data($user)->exec();

或者一個(gè)字段一個(gè)字段更新:

$this->dao->insert('user')
->set('account')->eq($account)
->set('password')->eq($password)
->exec();

獲得后插入的記錄id

echo $this->dao->lastInsertID();

六、更新語句:

更新語句和insert基本類似,可以使用一個(gè)data對(duì)象或者單個(gè)字段進(jìn)行更新。

$user->name = 'wwccss';
$user->age = 10;
$this->dao->update('user')->data($user)->where('id')->eq($userid)->limit(1)->exec(); 

$this->dao->update('user')
->set('account')->eq($account)
->set('password')->eq($password)
->exec()

七、REPLACE語句

replace也是需要定義一個(gè)data對(duì)象,然后調(diào)用replace方法。需要注意的事replace要保證表有主鍵或者唯一索引。

$this->dao->replace('user')->data($user)->exec();

八、刪除語句:

$this->dao->delete()->from('user')->where('id')->eq($userid)->exec();
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)