首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

ThinkPHP 數據庫操作速查:原生 SQL 與 ORM 方法對照表

     編輯:PHP 相關知識

ThinkPHP 數據庫操作速查:原生 SQL 與 ORM 方法對照表

ThinkPHP 的 ORM (M/D 模型) 提供流暢接口封裝常用 SQL。本文以 user 表為例,對照原生 SQL 與 ThinkPHP 方法,附帶進階查詢技巧。

基礎 CRUD 對照

操作原生 SQLThinkPHP 代碼說明
查詢所有SELECT * FROM userM('user')->select()返回二維數組
查詢單條 (PK)SELECT * FROM user WHERE id=2M('user')->find(2)返回一維數組
指定字段查詢SELECT username FROM userM('user')->field('username')->select()field 支持字符串/數組
刪除 (PK)DELETE FROM user WHERE id=2M('user')->delete(2)返回影響行數
更新 (PK)UPDATE user SET username='new' WHERE id=2$data=['username'=>'new']; M('user')->save($data)save 需包含主鍵值
新增INSERT INTO user (name,pwd) VALUES ('php','phpPwd')$data=['name'=>'php','pwd'=>'phpPwd']; M('user')->add($data)返回自增 ID

進階查詢技巧

where 條件構建

// 字符串條件
M('user')->where('status=1 AND score>80')->select();

// 數組條件 (推薦,自動防注入)
M('user')->where(['status'=>1, 'score'=>['gt', 80]])->select();

// 表達式查詢
M('user')->where('name', 'like', '%張%')->select();
M('user')->where('id', 'in', [1,2,3])->select();
M('user')->where('create_time', 'between', ['2023-01-01', '2023-12-31'])->select();

// 複雜邏輯
M('user')->where([
    'status' => 1,
    '_complex' => [
        ['role' => 'admin'],
        ['role' => 'editor', '_logic' => 'OR']
    ]
])->select();
// 生成:status=1 AND (role='admin' OR role='editor')

鏈式操作

M('user')
    ->field('id,username,email')
    ->where('status', 1)
    ->order('create_time DESC')
    ->limit(10, 20)  // offset 10, limit 20
    ->page(3, 15)    // 第3頁,每頁15條 (內部轉為 limit)
    ->select();

聚合統計

M('user')->count();           // COUNT(*)
M('user')->max('score');      // MAX(score)
M('user')->min('score');      // MIN(score)
M('user')->avg('score');      // AVG(score)
M('user')->sum('balance');    // SUM(balance)

原生 SQL 執行

// 查詢
M()->query("SELECT * FROM user WHERE id > ?", [100]);

// 寫入 (返回影響行數)
M()->execute("UPDATE user SET login_count = login_count + 1 WHERE id = ?", [123]);

事務控制

M()->startTrans();
try {
    M('user')->save(['id'=>1, 'balance'=>100]);
    M('order')->add(['user_id'=>1, 'amount'=>100]);
    M()->commit();
} catch (\Exception $e) {
    M()->rollback();
    throw $e;
}

常見坑與最佳實踐

  • M vs D:M('User') 直接操作表,D('User') 載入模型類(含自動驗證、完成、業務邏輯)
  • 字段大小寫:ThinkPHP 默認字段名小寫,配合 fields 屬性或數據庫視圖處理
  • 分頁:page($page, $listRows) 內部自動計算 limit,配合 Page 類生成分頁 HTML
  • 調試 SQL:M('user')->getLastSql() 獲取上條執行 SQL
  • 連貫操作重置:每次 select/find/add/save/delete 後查詢條件自動重置

熟練掌握 ORM 鏈式操作,能大幅減少手寫 SQL,提升開發效率並降低注入風險。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved