ORM 對象關係映射,O(Object) 對象,在專案中就是實體,更精確的來說就是資料Model,也可以說持久化類別。 R(Relation) 關係數據,M (Mapping)映射,將物件映射到關聯數據,將關係數據映射到物件的過程。更直覺理解就是,ORM 就是以OOP思想,產生增刪改查SQL語句。
比起PDO,ORM更適合快速開發項目,不用寫SQL語句。下面介紹幾個好用的ORM。
Medoo
下文皆以版本1.0.2為例。
環境需求
PHP 5.1+, 推薦PHP 5.4+ 且支援PDO.
至少安裝了MySQL, MSSQL, SQLite其中一種.
#如何安裝
Medoo支援Composer安裝和直接下載。
使用Composer安裝:
1 2 | composer require catfan/Medoo
composer update
|
登入後複製
直接下載:
https://github.com/catfan/Medoo/archive/master.zip
開始使用
引入Medoo並設定資料庫:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php
require_once 'medoo.php';
$db = new medoo([
'database_type' => 'mysql',
'database_name' => 'test',
'server' => 'localhost',
'username' => 'root',
'password' => '123456',
'charset' => 'utf8',
'port' => 3306,
'prefix' => '',
'option' => [ PDO::ATTR_CASE => PDO::CASE_NATURAL ]
]);
|
登入後複製
如果是SQLite:
1 | $database = new medoo([ 'database_type' => 'sqlite', 'database_file' => 'my/database/path/database.db']);
|
登入後複製
CURD
查詢(Read):
1 2 3 4 5 6 7 8 | select( $table , $columns , $where )
- table [string] 表名
- columns [string/ array ] 字段
- where (可选) [ array ] 查询条件get( $table , $columns , $where )
- table [string] 表名
- join [ array ] 关联查询,如果没有可以忽略
- columns [string/ array ] 字段
- where (可选) [ array ] 查询条件
|
登入後複製
範例:
1 2 3 4 5 6 7 | $user = $db ->select('user', '*');
$user = $db ->get('user', '*');
$user = $db ->select('user','*', array ('name ' => 'joy'));
$user = $db ->select('user','name', array ('age[>] ' => 20));
$user = $db ->select('user',['name','age'], array ('age[<=] ' => 20));
|
登入後複製
新增(Create):
範例:
1 | $db ->insert('user', array ('name'=> 't3', 'age'=>22));
|
登入後複製
注意:如果資料裡麵包含子數組將會被serialize()序列化, 你可以使用json_encode()作為JSON儲存.
#更新(Update):
1 | update( $table , $data , $where )
|
登入後複製
範例:
1 | $db ->update('user', array ('name'=> 't5'), array ('id'=> 23));
|
登入後複製
刪除(Delete):
範例:
1 | $db ->update('user', array ('id'=> 23));
|
登入後複製
where
聚合查詢
1 2 3 4 5 6 | $db ->has('user', array ('id'=> 23));
$db -> count ('user', array ('id[>]'=> 23));
$db ->max('user', 'age', array ('gender'=> 1));
$db ->min('user', 'age', array ('gender'=> 2));
$db ->avg('user', 'age', array ('gender'=> 2));
$db ->sum('user', 'age', array ('gender'=> 2));
|
登入後複製
以上方法均支援第二個參數是$join,即關聯查詢。
交易機制
1 2 3 4 5 6 7 8 9 | $db ->action( function ( $db ) {
try {
$db ->insert( "account" , [ "name" => "foo" , "email" => "bar@abc.com" ]);
$db -> delete ( "account" , [ "user_id" => 2312 ]);
} catch (Exception $e ){
return false;
}
});
|
登入後複製
使用query
可以直接使用SQL。
1 2 3 4 5 | $data = $db ->query( "SELECT * FROM user" )->fetchAll();
print_r( $data );
$db ->query( "DELETE FROM user where name='t5' " );
|
登入後複製
直接使用PDO
Medoo是基於PDO的,所以可以直接呼叫PDO實例。
取得PDO實例:
接下來,可以使用PDO物件的所有方法了。
1.PDO::beginTransaction — 啟動一個交易
2.PDO::commit — 提交一個交易
3.PDO::__construct — 建立一個表示資料庫連線的PDO 實例
4.PDO::errorCode — 取得跟資料庫句柄上一次操作相關的SQLSTATE5.PDO::errorInfo — 取得錯誤訊息
6.PDO::exec — 執行一則SQL 語句,並傳回受影響的行數
7.PDO::getAttribute — 取回一個資料庫連接的屬性
*8.PDO::getAvailableDrivers — 傳回一個可用驅動的陣列(了解即可)
*9.PDO::inTransaction — 檢查是否在一個交易內(了解即可)
10.PDO::lastInsertId — 傳回最後插入行的ID或序列值
11.PDO::prepare — 建立SQL的預處理,傳回PDOStatement物件
12.PDO::query — 用於執行查詢SQL語句,傳回PDOStatement物件
13.PDO::quote — 為sql字符串新增單引號
14.PDO::rollBack — 回滾一個交易
15.PDO::setAttribute — 設定屬性
##範例:
1 2 3 4 | $stmt = $pdo ->query('select * from user limit 2');
$rows = $stmt ->fetchAll();
print_r( $rows );
|
登入後複製
pdo交易:
1 2 3 4 5 6 7 8 | $pdo ->beginTransaction();
try {
$pdo ->commit();
} catch (PDOException $e ){
$pdo ->rollBack();
throw $e ;
}
|
登入後複製
使用DEBUG
#debug() 列印最後的SQL語句
在select、get、insert、update等方法前面加上debug()方法可以列印SQL語句,程式不會繼續運作:
1 2 | $user = $db ->debug()->select('user', '*');
|
登入後複製
error() 回傳最後一次操作的錯誤訊息
1 2 | $db ->select('user3', '*');
var_dump( $db ->error());
|
登入後複製
log() 傳回所有的SQL查詢語句,不影響查詢正常執行
1 2 | $db ->select('user', '*');
var_dump( $db ->log());
|
登入後複製
last_query() 和log()類似,但只傳回最後一個SQL查詢語句,不影響查詢正常執行
1 2 | $db ->select('user', '*');
var_dump( $db ->last_query());
|
登入後複製
相關閱讀
#對PHP PDO的一些認識小結
#php中PDO方式實作資料庫的增刪改查
#php使用pdo連線mssql server資料庫實例
以上是PHP使用ORM進行資料庫操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!