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

Yii 框架 find/findAll 指定字段查詢優化指南

     編輯:PHP 相關知識

Yii 框架 find/findAll 指定字段查詢優化指南

Yii 的 ActiveRecord 模式中,find() 返回單個模型對象,findAll() 返回對象數組。默認查詢所有字段,但在大表或高頻接口中,僅選取必要字段能顯著降低內存佔用和網絡傳輸開銷。本文總結多種指定字段的優雅寫法。

傳統寫法:CDbCriteria 對象

$criteria = new CDbCriteria;
$criteria->select = 'username, id, email';
$criteria->order = 'id DESC';
$users = User::model()->findAll($criteria);

進階寫法:陣列配置(推薦)

直接傳遞關聯數組,代碼更簡潔,支持鏈式調用:

// findAll 多條記錄
$users = User::model()->findAll(array(
    'select' => array('username', 'id', 'email'),
    'order' => 'id DESC',
));

// find 單條記錄
$user = User::model()->find(array(
    'select' => array('username', 'id', 'email'),
    'order' => 'id DESC',
    'condition' => 'id = :id',
    'params' => array(':id' => $id),
));

安全寫法:參數綁定防注入

$users = $this->user->find(array(
    'select' => array('id', 'username', 'email'),
    'order' => 'id DESC',
    'condition' => 'state = :state AND id = :id',
    'params' => array(':state' => '1', ':id' => '2'),
));

分頁場景的特殊處理

使用 CPagination 時仍需實例化 CDbCriteria,因為分頁組件依賴 criteria 對象計算總數:

$criteria = new CDbCriteria;
$criteria->select = 'id, username';
$criteria->condition = 'status = 1';

$count = User::model()->count($criteria);
$pages = new CPagination($count);
$pages->pageSize = 20;
$pages->applyLimit($criteria);

$users = User::model()->findAll($criteria);

結果集遍歷輸出

$projects = Project::model()->findAll();
foreach ($projects as $project) {
    echo $project->attributes['title']; // 或 $project->title
}

複雜條件查詢範例

$criteria = new CDbCriteria();
$criteria->addInCondition('id', array(1, 2, 3));
$newsTypes = NewsType::model()->findAll($criteria);

性能優化建議

  • 避免 SELECT *:明確列出所需字段,減少 I/O 和內存
  • 善用索引:where/order 條件字段需建立索引
  • 適度使用緩存:高頻只讀查詢配合 queryCache
  • 大數據量分批處理:配合 limit/offset 或游標迭代
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved