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

ThinkPHP 連貫操作 (Fluent Interface) 完整速查:where、order、limit、field、join 等鏈式呼叫

     編輯:PHP 綜合知識

核心概念

ThinkPHP 模型 (M()/D()) 回傳物件支援方法鏈,終端方法 (select/find/save/delete) 執行實際 SQL。中間方法可任意順序、多次呼叫。

常用鏈式方法速查表

方法參數型態說明範例
where字串/陣列/物件查詢條件where('id>5')、where(['status'=>1,'type'=>2])
order字串/陣列排序order('id DESC')、order(['id'=>'DESC','name'=>'ASC'])
limit字串/整數/陣列限制筆數limit(10)、limit(5,10)、limit('5,10')
field字串/陣列/布林指定/排除欄位field('id,name')、field(['nickname'=>'name'])、field('id',true) 排除 id
table字串/陣列指定資料表 (含前綴)table('__PREFIX__user u')
group字串GROUP BYgroup('category_id')
having字串HAVING 條件having('COUNT(*)>5')
join字串/陣列JOIN 關聯表join('LEFT JOIN profile p ON u.id=p.uid')
union字串/陣列/物件UNION 查詢union('SELECT * FROM user_archive')
distinct布林DISTINCTdistinct(true)
lock布林FOR UPDATE / LOCK IN SHARE MODElock(true)
cache混合查詢快取cache(true, 300, 'user_list')
relation字串關聯模型查詢relation('profile')
validate陣列自動驗證規則validate(['name'=>'require'])
auto陣列自動完成規則auto(['create_time'=>['time','function']])
filter字串資料過濾函數filter('htmlspecialchars')
scope字串/陣列命名範圍scope('latest')

實戰範例

<?php
// 分頁查詢:最新 10 筆已發布文章,含作者暱稱
$list = M('Article')
    ->where(['status' => 1])
    ->order('publish_time DESC')
    ->limit(10)
    ->field('id,title,publish_time,author_id')
    ->join('LEFT JOIN __USER__ u ON Article.author_id=u.id')
    ->field('u.nickname', true) // 追加欄位
    ->select();

// 統計:各分類文章數 (含 0)
$stats = M('Category')
    ->field('Category.id, Category.name, COUNT(Article.id) AS cnt')
    ->join('LEFT JOIN __ARTICLE__ Article ON Category.id=Article.cate_id')
    ->group('Category.id')
    ->select();

// 事務中鎖定行更新
M('Account')->startTrans();
$acc = M('Account')->where(['id'=>1])->lock(true)->find();
$acc['balance'] -= 100;
M('Account')->save($acc);
M('Account')->commit();

進階技巧

  • page(2, 15) 內部轉為 limit(15, 15),語意更清晰。
  • alias('u') 給主表別名,配合 join 簡化欄位引用。
  • filter('strip_tags') 寫入前自動過濾,配合 auto 實現 XSS 防護。
  • 除錯 SQL:echo M()->_sql(); (需在終端方法前呼叫)。

避坑指南

  1. 刪除/更新必加 where,否則全表操作。
  2. field('id', true) 為「排除 id」,易誤解為「只取 id」。
  3. 多次呼叫 where 會 AND 組合,非覆蓋。
  4. cache() 需配置快取驅動 (Redis/Memcache/File),否則無效。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved