[TOC] #### 前言 --- Laravel 提供三种方式操作数据库:原始SQL(DB Facade)、查询构造器(Query Builder)、模型(Eloquent ORM) #### find() 方法 --- **单个主键查询** 传入单个主键值,返回匹配的单个模型实例。若数据不存在则返回 null ```php DB::table('users')->find(1); // 查询到数据返回 stdClass 对象 User::find(1); // 相当于 where in id = 1 查询到数据返回 object(App\Models\User)#170 (32) { } ``` **主键数组查询** 传入主键数组,返回包含所有匹配记录的集合(Collection)。若数据不存在则返回空数组 ```php UserModel::find([1, 2]); // 相当于 where id in (1, 2) object(Illuminate\Database\Eloquent\Collection)#169 (2) {} ``` **适用场景** 快速主键检索:适用于已知主键直接获取记录的场景,性能优化于链式条件查询 批量主键查询:替换 `whereIn('id', [1, 2, 3])`,简化代码 #### fist() 方法 --- fist() 是 ORM 和查询构造器中常用的方法,用于从数据库中获取第一条记录 ```php // 返回模型实例,查不到数据返回 null $users = User::first(); // 返回stdClass 对象,查不到数据返回 null $users = DB::table('users')->first(); ``` 实际应用场景:结合条件获取第一条数据 find() 直接是通过主键定位记录,而 fist() 是结合条件获取符合条件的第一条记录 ```php $user = User::where('status', 'active')->first(); if (!$user) { // 处理无结果的情况 } ``` #### get() 方法 --- get() 方法用于查询多条数据,返回所有符合条件的集合。是否查询到数据都返回集合 ```php // 查询构造器,返回普通集合 $users = DB::table('users')->get(); // Illuminate\Support\Collection // Eloquent 模型,返回模型集合 $users = User::where('status', 1)->get(); // Illuminate\Database\Eloquent\Collection ``` 判断集合是否为空,为空则代表没有数据 ```php if ($users->isEmpty()) { // 处理无数据情况 } if ($users->isNotEmpty()) { // 处理有数据情况 } ``` 提取指定字段 ```php $users->pluck('id'); // 返回的是集合对象 Illuminate\Support\Collection $users->pluck('id')->toArray(); // 转为普通数组 ``` #### select() 方法 --- select() 是查询构造器中用于指定查询字段的核心方法,避免返回全部数据 ```php User::select('id', 'nick_name')->get(); ``` 使用 as 关键字定义字段别名,优化结果集的可读性 ```php User::select('id', 'nick_name as name')->get(); ``` 动态添加字段:在已有查询基础上追加字段,适用于分步构建查询的场景 ```php $baseQuery = DB::table('users')->select('name', 'email'); $users = $baseQuery->addSelect('gender')->get(); ```