当前位置:首页 > Laravel > Laravel框架之查询构造器:查询操作

Laravel框架之查询构造器:查询操作

Laravel框架之查询构造器:查询操作

知识点:1.终极方法2.链式方法3.查询条件


1.终极方法: 生成查询结果

  • get(): 获取满足条件的全部记录

  • first(): 获取满足条件和第一个记录

  • value(): 获取满足条件记录的指定字段的值

  • pluck(): 获取满足条件的某一个列的值

  • chunk(): 分块查询,取出部分数据进行闭包处理,返回false会终止

  • count(), max(), min(), avg(), sum(): 聚合方法

  • exists(): 是否存在满足条件的记录


2.链式方法

  • select()/selectRaw()/addSelect(): 设置查询字段

  • orderBy()/orderByRaw(): 排序

  • groupBy()/having(): 分组

  • inRandomOrder(): 随机

  • skip()/take(): 跳过一些记录查询

  • offset()/limit(): 分页查询


3.查询条件

  • where()/whereRaw()/orWhere()/orWhereRaw(): 设置查询条件

  • whereBetween()/whereNotBetween: 区间查询

  • whereIn()/whereNotIn(): 集合查询

  • whereNull()/whereNotNull(): NULL查询

  • whereDate()/whereYear()/whereMonth()/whereDay(): 时间查询

  • whereColumn(): 列值相等查询, 可使用数组and查询


更多查询构造器方法,请登录Laravel官网查询构造器或者Laravel中文社区


配套源码

  • 生成控制器:app/Http/Controllers/home/DbController.php

  • php artisan make:controller  home/DbController

  • 控制器源码: app/Http/Controllers/home/DbController.php

<?php

namespace App\Http\Controllers\home;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;

class DbController extends Controller
{
    //查询
    public function select()
    {
        //1. 全部
        $res = DB::table('stu')->get();

        //2. 单条
        $res = DB::table('stu')->first(); // 第一条
        $res = DB::table('stu')->find(2);  // 主键查询

        //3. 字段
        $res = DB::table('stu')->where('id',2)->value('name');  // 字段值
        $res = DB::table('stu')->pluck('salary');  // 列
        $res = DB::table('stu')->pluck('salary','name');  // 自定义键名

        //3. 分块
        $list = [];  // 名单数组
        // 必须先将记录排序后才可以调用chunk()
        $res = DB::table('stu')->orderByDesc('salary')
            ->chunk(2, function ($stus) use (&$list){  // 引用传参到闭包
            foreach($stus as $stu) {
               $list[] = ($stu->salary <= 6000) ? $stu->name : false;
            }
            // 过滤掉名单中值为:false 的元素
            $list = array_filter($list);
        });
//        dump($list);  // 查看工资小于6000的名单

        //4.分页
        // 跳过前2个记录,连续输出2条
        $res = DB::table('stu')->skip(2)->take(2)->get();
        //从偏移量为2开始,输出3条记录
        $res = DB::table('stu')->offset(1)->limit(3)->get();

        //5.条件
        // AND 与查询
        $res = DB::table('stu')->where('age','>',50)->get();
        $res = DB::table('stu')
            ->where('age','>',50)
            ->where('salary','<',6000)
            ->get();
        // 可以将多条件写到数组中
        $res = DB::table('stu')
            ->where([
                ['age', '>', 50],
                ['salary','<', 6000]
            ])
//            ->toSql()  // 查看生成的sql语句
            ->get();

        // OR 或查询
        $res = DB::table('stu')->orWhere('salary','>',5000)
            ->orWhere('age','<', 50)
//            ->toSql();
            ->get();

        // 原生条件: 直接写原生sql语句中的查询字符串
        $res = DB::table('stu')->whereRaw('age < 40 and salary < 8000')->toSql();
        $res = DB::table('stu')->whereRaw('age < 40 and salary < 8000')->get();

        // 区间查询
        $res = DB::table('stu')->whereBetween('salary',[8000, 10000])->get();
        $res = DB::table('stu')->whereIn('id',[1,3,7])->get();


        // 其它
        // 随机取出一条
        $res = DB::table('stu')->inRandomOrder()->first();

        // 设置结果中的字段列表
        $res = DB::table('stu')
//            -> select('name','age','salary')
//            -> select(DB::raw('name, age'))  // 原生字符串
//            -> addSelect('create_time') // 追回一个字段
            -> selectRaw('name,salary,update_time') // 原生快捷语法
            -> first();

        dump($res);
    }
}


免责声明:部分文章信息来源于网络及网友投稿,本网站只负责文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性,如本网站文章和转稿涉及版权等问题,请作者及时联系本站,我们会尽快处理。烛光驿站欢迎捐赠赞赏

权益
版权所有:© 2018 www.sjzphp.cn
网站备案:冀ICP备17012435号-2
联系邮箱:guotaoi@foxmail.com