本文共 2591 字,大约阅读时间需要 8 分钟。
在 Laravel 中通过模型查询数据是开发生活中常见操作。本文将详细介绍 Laravel 的模型查询方法,帮助开发者高效地查询数据库数据。
Laravel 提供了 get
和 all
两种基本的模型查询方法。两者的主要区别是调用方式:all
方法可以直接获取所有数据,而 get
方法默认情况下会执行一次查询获取所有记录。
// 获取所有用户\App\User::all();// 或者使用 get 方法\App\User::get();//.echo '获取所有用户';//uju shah这个方法是不是也有相同的效果呢?//工作表里有很多行记录,让 user-model 对应这个表。// 使用 where 方法加上 get 获取符合条件的用户\App\User::where('id', '>',5) ->get();
模型查询的结果通常用 Illuminate\Support\Collection
存储,包含一系列 stdClass
对象。开发者可以通过遍历集合中的对象访问具体字段。
// 获取用户集合$users = User::get();// 遍历用户列表foreach ($users as $user) { echo $user->name;}
在某些情况下,可能只需要获取一行或一列数据。Laravel 提供了 first
和 value
方法来实现这一点。
// 获取唯一用户$user = User::where('name', 'marun') ->first();// 获取用户的特定字段$user = User::where('name', 'marun') ->value('password');// 获取指定列的数据$user = User::where('name', 'marun') ->pluck('password');// 自定义列名$user = User::where('name', 'marun') ->pluck('password', 'name');
当处理大量数据时,可以使用 chunk
方法将数据分成小块,适合与 Artisan
命令配合使用。
//chunk(2, function ($users) {// dump($users);// });// 该方法适用于在练习场景中处理大量用户数据// 停止 chunk 运算User::orderBy('id') ->chunk(2, function ($users) { if ($users[0]->name == 'Marun') { dump($users[0]); return false; } });
查询构建器支持多种聚合方法,如 count
, max
, min
, avg
, 和 sum
,可以用在查询结果集中。
$users = User::get();$count = $users->count();$maxId = $users->max('id');$minId = $users->min('id');$avgId = $users->avg('id');$totalId = $users->sum('id');
可以在聚合上添加条件,确保结果符合特定筛选要求。
//统计符合条件的用户数量$count = User::where('age’, '>', 18) ->get() ->count();
使用 select
方法可以自定义返回的字段列表,distinct
用于重复数据去重。
// 返回所有员工名单$users = User::select('name') ->get();// 去重后的员工名单$users = User::select('name') ->distinct() ->get();
使用 DB::raw
执行原生 SQL 语句,但需注意 SQL 注入安全。
// 结合 where 方法使用 DB::raw$users = User::select(DB::raw('count(*) as user_count , name ')) ->where('id', '<>', 1) ->groupBy('name') ->get();// 返回特定字段的数据$users = User::selectRaw('name') ->get();// 使用 whereRaw 方法$users = User::whereRaw('price > IF( name= "marun", 100, ?)', [50]) ->get();
使用 havingRaw
处理复杂的 SQL 子句,注意字段是否存在严格模式支持。
// SQL 错误提示 1055,解决方法是设置数据库配置中的 strict 为 false$orders = User::groupBy('name') ->havingRaw('price > 300') ->get();
可以使用 orderByRaw
定自定义排序逻辑,例如计算字段间的差异。
$orders = User::orderByRaw('updated_at - created_at DESC') ->get();
通过以上方法,开发者可以灵活应对各类数据库查询需求,从基础查询到高级聚合及原生语句的使用,都能方便地完成任务。
以上内容仅供参考,具体实施前建议结合项目实际需求及数据库规范进行调整。
转载地址:http://dygyk.baihongyu.com/