[TOC] #### 前言 --- Laravel 提供三種方式操作數(shù)據(jù)庫:原始SQL(DB Facade)、查詢構(gòu)造器(Query Builder)、模型(Eloquent ORM) #### find() 方法 --- **單個(gè)主鍵查詢** 傳入單個(gè)主鍵值,返回匹配的單個(gè)模型實(shí)例。若數(shù)據(jù)不存在則返回 null ```php DB::table('users')->find(1); // 查詢到數(shù)據(jù)返回 stdClass 對(duì)象 User::find(1); // 相當(dāng)于 where in id = 1 查詢到數(shù)據(jù)返回 object(App\Models\User)#170 (32) { } ``` **主鍵數(shù)組查詢** 傳入主鍵數(shù)組,返回包含所有匹配記錄的集合(Collection)。若數(shù)據(jù)不存在則返回空數(shù)組 ```php UserModel::find([1, 2]); // 相當(dāng)于 where id in (1, 2) object(Illuminate\Database\Eloquent\Collection)#169 (2) {} ``` **適用場(chǎng)景** 快速主鍵檢索:適用于已知主鍵直接獲取記錄的場(chǎng)景,性能優(yōu)化于鏈?zhǔn)綏l件查詢 批量主鍵查詢:替換 `whereIn('id', [1, 2, 3])`,簡(jiǎn)化代碼 #### fist() 方法 --- fist() 是 ORM 和查詢構(gòu)造器中常用的方法,用于從數(shù)據(jù)庫中獲取第一條記錄 ```php // 返回模型實(shí)例,查不到數(shù)據(jù)返回 null $users = User::first(); // 返回stdClass 對(duì)象,查不到數(shù)據(jù)返回 null $users = DB::table('users')->first(); ``` 實(shí)際應(yīng)用場(chǎng)景:結(jié)合條件獲取第一條數(shù)據(jù) find() 直接是通過主鍵定位記錄,而 fist() 是結(jié)合條件獲取符合條件的第一條記錄 ```php $user = User::where('status', 'active')->first(); if (!$user) { // 處理無結(jié)果的情況 } ``` #### get() 方法 --- get() 方法用于查詢多條數(shù)據(jù),返回所有符合條件的集合。是否查詢到數(shù)據(jù)都返回集合 ```php // 查詢構(gòu)造器,返回普通集合 $users = DB::table('users')->get(); // Illuminate\Support\Collection // Eloquent 模型,返回模型集合 $users = User::where('status', 1)->get(); // Illuminate\Database\Eloquent\Collection ``` 判斷集合是否為空,為空則代表沒有數(shù)據(jù) ```php if ($users->isEmpty()) { // 處理無數(shù)據(jù)情況 } if ($users->isNotEmpty()) { // 處理有數(shù)據(jù)情況 } ``` 提取指定字段 ```php $users->pluck('id'); // 返回的是集合對(duì)象 Illuminate\Support\Collection $users->pluck('id')->toArray(); // 轉(zhuǎn)為普通數(shù)組 ``` #### select() 方法 --- select() 是查詢構(gòu)造器中用于指定查詢字段的核心方法,避免返回全部數(shù)據(jù) ```php User::select('id', 'nick_name')->get(); ``` 使用 as 關(guān)鍵字定義字段別名,優(yōu)化結(jié)果集的可讀性 ```php User::select('id', 'nick_name as name')->get(); ``` 動(dòng)態(tài)添加字段:在已有查詢基礎(chǔ)上追加字段,適用于分步構(gòu)建查詢的場(chǎng)景 ```php $baseQuery = DB::table('users')->select('name', 'email'); $users = $baseQuery->addSelect('gender')->get(); ```