> ## 在控制器中調用模型進行查詢數據
### 1. 獲取單條數據
**在模型內部,請不要使用$this->name的方式來獲取數據,請使用$this->getAttr('name') 替代。**
```php
// 根據主鍵查詢
$user = User::get(1);
echo $user->name;
// 根據數組條件查詢
$user = User::get(['name' => 'thinkphp']);
// 使用閉包函數查詢
$user = User::get(function($query){
$query->where('name', 'thinkphp');
});
// 實例化之后調用查詢方法
$user = new User();
$user->where('name', 'thinkphp')
->find();
```
### 2. 獲取多條數據
```php
// 根據主鍵獲取(可以傳入字符串或數組)
$list = User::all('1,2,3');
$list = User::all([1,2,3]);
foreach($list as $key=>$user){
echo $user->name;
}
// 使用數組條件查詢
$list = User::all(['status'=>1]);
// 使用閉包查詢
$list = User::all(function($query){
$query->where('status', 1)->limit(3)->order('id', 'asc');
});
foreach($list as $key=>$user){
echo $user->name;
}
// 實例化對象之后調用查詢方法
$user = new User();
$user->where('name', 'thinkphp')
->limit(10)
->order('id', 'desc')
->select();
```
### 3. 獲取單個字段值或者單個列的值
```php
// 獲取單個值
User::where('id',10)->value('score');
// 獲取某個列的所有值
User::where('status',1)->column('name');
// 以id為索引
(適合構造key=>value組合)
User::where('status',1)->column('name','id');
User::where('status',1)->column('id,name'); // 同tp3的getField
```
### 4. 動態查詢(即根據某個字段值進行快捷查詢)
```
// 根據name字段查詢用戶
$user = User::getByName('thinkphp');
// 根據email字段查詢用戶
$user = User::getByEmail('thinkphp@qq.com');
```
### 5.通過Query類進行查詢(即鏈式操作)
```
User::where('id','>',10)->select();
User::where('name','thinkphp')->find();
```
### 6. 批量查詢(針對大數據量)
```
User::chunk(100,function($users){
foreach($users as $user){
// 處理user模型對象
}
});
```
### 7. 對查詢進行緩存
```
// get和all的第三個參數表示開啟查詢緩存
$user = User::get(1,'',true);
$list = User::all('1,2,3','',true);
```
### 8. 主庫讀取(采用分布式數據庫時,如果剛插入數據立刻查詢是查不到的,因為從庫還沒有更新數據,這時候應該從主庫進行獲取)
```
// 第一種方案:
$user = new User;
$user->name = 'thinkphp';
$user->email = 'thinkphp@qq.com';
$user->save();
// 從主庫讀取數據
$user->master()->get($user->id);
// 第二種方案:
// 5.0.19+之后可以在數據庫配置文件進行定義
// 主庫寫入后從主從庫讀取
'read_master' => true
// 第三種方案:
$user = new User;
$user->name = 'thinkphp';
$user->email = 'thinkphp@qq.com';
$user->readMaster()->save();
// 后續該模型的操作從主庫讀取數據
// 后續所有模型的查詢都從主庫讀取數據
$user = new User;
$user->name = 'thinkphp';
$user->email = 'thinkphp@qq.com';
$user->readMaster(true)->save();
```
- 運行環境需求
- tp5目錄結構
- 命令行生成代碼
- 路由
- 請求
- 獲取請求信息
- 超全局變量獲取
- 更改請求變量的值
- 判斷是否為某種請求類型
- 偽裝表單請求類型
- HTTP頭部信息
- 偽靜態
- 向請求對象中注入自定義的屬性和方法
- 簡單的傳參可以使用參數綁定
- 依賴注入(將對象注入方法作為參數)
- 將請求的數據進行緩存
- 控制器
- 一個控制器代碼示例
- 空控制器
- 資源控制器
- 模型
- 一個模型代碼示例
- 模型的四種調用方法
- 控制器中調用模型添加數據
- 控制器中調用模型更新數據
- 控制器中調用模型刪除數據
- 控制器中調用模型查詢數據
- 模型中使用聚合函數
- 獲取器
- 修改器
- 自動寫入時間戳
- 只讀字段
- 軟刪除
- 自動類型轉換
- 數據自動完成
- 查詢范圍
- 數組方式訪問和轉換為數組
- json序列化
- 模型的事件
- 關聯模型
- 一對一關聯
- 一對多關聯
- 遠程一對多(跨表關聯)
- 多對多關聯
- 多態關聯
- 關聯預載入N+1次查詢變2次
- 延遲預載入
- 關聯統計
- 視圖與模板
- 模板引擎配置
- 分配數據到模板
- 輸出替換
- 模板中輸出變量
- 模板中輸出系統變量(配置常量超全局)
- 模板中輸出請求信息
- 模板中使用php函數
- 輸出到模板中的變量指定默認值
- 模板中進行運算
- 原樣輸出代碼不解析
- 模版中注釋
- 模板布局與繼承
- 文件包含
- 內置標簽
- 循環輸出標簽
- 比較標簽
- 條件判斷標簽
- 引入資源文件(js-css)
- 使用原生php
- 在模板中定義變量和常量
- 助手函數
- 常用功能
- 表單驗證
- 驗證器的定義
- 自定義驗證規則
- 速查表
- 系統默認根命名空間
- 系統路徑常量
- 請求變量
- URL請求和信息方法