ThinkPHP 的 ORM 機制讓數據庫操作極其簡潔。本文從數據庫配置入手,演示 M() 實例化模型、select() 查詢、模板變量賦值、前端遍歷輸出的標準化流程,並介紹調試模式下的 SQL 監控技巧。
<?php
// config.php - 方式一:分項配置(推薦清晰度)
return [
'DB_TYPE' => 'mysql',
'DB_HOST' => 'localhost',
'DB_NAME' => 'thinkphp',
'DB_USER' => 'root',
'DB_PWD' => '',
'DB_PORT' => 3306,
'DB_PREFIX' => 'tp_', // 表前綴
];
// 方式二:DSN 字符串(優先級高於分項配置)
'DB_DSN' => 'mysql://root:@localhost:3306/thinkphp';
<?php
class IndexAction extends Action {
public function index() {
// 1. 實例化模型 (對應 tp_user 表)
$User = M('User'); // 等同 new Model('User'),表名首字母大寫
// 2. 查詢數據
$data = $User->select(); // 返回二維數組
// 3. 賦值給模板
$this->assign('list', $data);
// 4. 渲染模板
$this->display();
}
}
?>
| 操作 | 方法 | 說明 |
|---|---|---|
| 增 (Create) | add($data) | 插入數據,返回自增 ID |
| 刪 (Delete) | delete($pk) | 按主鍵刪除,支持數組批量刪除 |
| 改 (Update) | save($data) | 更新數據,需包含主鍵值 |
| 查 (Read) | select() | 查詢多條,返回二維數組 |
| 查 (Read) | find($pk) | 查詢單條,返回一維數組 |
<!-- Tpl/Index/index.html -->
<table border="1" cellpadding="5">
<tr><th>ID</th><th>用戶名</th><th>性別</th></tr>
<volist name="list" id="vo">
<tr>
<td><{$vo.id}></td>
<td><{$vo.username}></td>
<td><{$vo.sex}></td>
</tr>
</volist>
</table>
關鍵語法:
name="list":模板變量名(assign 的鍵)id="vo":循環變量名,當前行數據對象<{$vo.field}>:輸出字段值(ThinkPHP 模板標簽用 <{ }> 包裹)define('APP_DEBUG', true);
'SHOW_PAGE_TRACE' => true,
<?php
$User = M('User');
// 條件查詢
$User->where('status=1 AND age>18')->select();
$User->where(['status'=>1, 'age'=>['gt',18]])->select();
// 排序、限制
$User->order('id DESC')->limit(10)->select();
$User->order('create_time DESC')->page(2, 20)->select(); // 分頁
// 字段選擇
$User->field('id,username,email')->select();
// 統計
$User->where('status=1')->count();
$User->max('score');
$User->sum('balance');
// 原生 SQL
$User->query("SELECT * FROM tp_user WHERE id > ?", [100]);
$User->execute("UPDATE tp_user SET login_count = login_count + 1 WHERE id = ?", [1]);
| 現象 | 原因 | 解決 |
|---|---|---|
| select() 返回空數組 | 表名大小寫不匹配 / 表前綴錯誤 / 無數據 | 檢查 M('User') 對應 tp_user 表、數據庫實際表名 |
| 模板變量不顯示 | assign 鍵名與模板 name 不一致 | 統一變量名,使用 <{$Think.get.list|var_dump}> 調試 |
| SQL 不顯示在 Trace | 未開啟 APP_DEBUG 或 SHOW_PAGE_TRACE | 雙重確認兩個常量均為 true |
tp_user_info,模型調用 M('UserInfo')SELECT *,明確指定 field() 減少傳輸開銷掌握「配置 → 模型 → 查詢 → 賦值 → 遍歷」這條核心鏈路,是 ThinkPHP 開發的基石,也是從新手邁向熟練開發者的必經之路。