ORM源碼地址
這個文档是針對本站提出的ORM對應定制的, 源碼地址鏈接 http://www.wkwkk.com/article/f166522c5c3d490203fb2456bcdc37d0.html
連貫操作
以下是增刪改查基本指令說明:
連貫操作查詢語句 select from where order by limit
select(...)->from(...)->where(...)->having(...)->groupBy(...)->orderBy(...)->limit(...)->all()/row()/single() 這樣的連貫操作方式是以構造形式取多行、取一行、取單個;
舉例:
select id,name from prefix_article where is_shown = 1 order by update_time desc limit 50;
用本orm可以這樣寫:
// 類先繼承基礎模型,基礎模型實例化Pdo操作類
$this->onRead()
->select('id,name')
->from('article')
->where([
'is_shown' => 1
])
->orderBy('update_time desc')
->limit(50)
->row();其中, 本orm採用了讀、寫、事務庫調用分離的方式, 那麽onRead()方法是調用讀庫。onWrite類似laravel框架當中orm用到的onWriteConnection方法, 顧名思義, 如果在$this指針後面調用onWrite()方法就是調用寫庫。onTrans()方法是調用事務。這三種方法返回的都是PDO被實例化後的對象。
from方法内傳入的參數article不傳數據表前綴是因爲在配置對象當中prefix選項事先已經寫好。
連貫操作左連接
->leftJoin([string 表名稱], [string 表別名], [string on關鍵字後邊的關係表達式])
如果使用了左連接, 一般來說都會在主表上設置別名, 聯表時請給主表增加別名。
例如以下原生SQL語句:
select id from prefix_table_a a left join prefix_table_b as b on a.id = b.aid;
就可以寫成以下連貫語句
$this->onRead()
->select('id')
->from('table_a', 'a')
->leftJoin('table_b', 'b', 'a.id = b.aid')
// ->leftJoin('table_c', 'c', 'c.aid = a.id')
->all();連貫操作非查詢語句 insert update delete set values
連貫操作統一用go()方法來確定執行。
舉例說明
sql原生插入語句, 其中兩個?號各綁定到$v1, $v2兩個PHP變量裡
insert into prefix_member ( field1, field2 ) values ( ?, ? );
可以寫成以下php連貫語句
$this->onWrite()
->insert('member') // 事先在數據庫配置數組裡面槼定了prefix爲"prefix_"
->values([
'field1' => $v1,
'field2' => $v2,
])
->go();sql原生更新語句, 其中兩個?號各綁定到$v1, $v2兩個PHP變量
update prefix_member set field1 = ? where ( status = ? );
可以寫成以下PHP連貫操作語句
$this->onWrite()
->update('member')
->set([
'field1' => $v1,
])
->where([
'status' => $v2,
])
->go();sql原生刪除語句, 其中?號綁定到PHP變量$v
delete from prefix_member where trashfield = ?;
可以寫成以下PHP連貫操作語句
$this->onWrite()
->delete('member')
->where([
'trashfield' => $v,
])
->go();原生語句
原生語句操作查詢語句
sql(...)->bind(...)->all()/row()/single() 和上文一樣, 爲sql原生語句取多行、取一行、取單個;
以使用本orm實現上個原生sql語句的寫法, 寫法是:
$this->onRead()
->sql('select * from *_article where id = 6')
->row();如果id傳的參數是一個變量$id, 那麽寫法如下:
$this->onRead()
->sql('SELECT * FROM *_article WHERE id = ?')
->bind([
$id,
])
->row();其中bind方法傳入的參數是按問號(?)出現的次序逐個在數組中出現的,内部實現僅是用pdo按次序綁定參數而已。
原生語句操作非查詢語句
調用sql(...)->bind(...)->go() 的方法和上文一樣, 也是爲習慣於寫原生非查詢語句來實現的簡單操作方式。
寫法舉例如下:
$this->onWrite()
->sql('insert into lalala ( fileda, fieldb ) values ( ?, ? )')
->bind([
$samplevalue_a,
$samplevalue_b,
])
->go();緩存查詢數據
在查詢語句中使用在最後操作方法執行之前插入一句cache()方法就可以了, 支持兩個可選參數,第一個參數是生存秒數,默認爲30秒,第二個參數是自定義key值, 不寫則orm自動根據sql去hash一個值。
代碼例子:
$this->onRead()
->select('content')
->from('table_a')
->where([
'id' => $id,
])
->cache(5, 'arch_' . $id)
->single();
2 樓 IP 223.20.***.26 的嘉賓 说道 : 很久前