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 的嘉賓 说道 : 很久前