数据库: 查询构造器

获取结果

  1. 从表中检索所有行
  • get
use Illuminate\Support\Facades\DB;$users = DB::table('users')->get();
//可以将列作为对象的属性来访问每列的值
foreach ($users as $user) {echo $user->name;
}
  1. 从表中检索单行或单列
  • first :检索单行
$user = DB::table('users')->where('name', 'John')->first();
return $user->email;
  • value :提取单个值
$email = DB::table('users')->where('name', 'John')->value('email');
  • find:通过 id 字段值获取单行数据
//()必填
$user = DB::table('users')->find(3);
  1. 获取某一列的值

pluck

  • 包含单列值的集合
$titles = DB::table('users')->pluck('title');foreach ($titles as $title) {echo $title;
}
  • 第二个参数来指定结果集中要作为键的列
$titles = DB::table('users')->pluck('title', 'name');foreach ($titles as $name => $title) {echo $title;
}

聚合

  1. count, max, min, avg
  2. 判断记录是否存在
DB::table('orders')->where('finalized', 1)->count()
DB::table('orders')->where('finalized', 1)->exists()
DB::table('orders')->where('finalized', 1)->doesntExist()

Select 说明

自定义一个 「select」 查询语句来查询指定的字段

  1. select
$users = DB::table('users')->select('name', 'email as user_email')->get();
  1. distinct
$users = DB::table('users')->distinct()->get();
  1. addSelect
$query = DB::table('users')->select('name');
$users = $query->addSelect('age')->get();

原生表达式

  1. raw
$users = DB::table('users')->select(DB::raw('count(*) as user_count, status'))->where('status', '<>', 1)->groupBy('status')->get();
  1. selectRaw : 代替 addSelect(DB::raw(…))
$orders = DB::table('orders')->selectRaw('price * ? as price_with_tax', [1.0825])->get();
  1. whereRaw / orWhereRaw : 将原生的 「where」 注入到你的查询
$orders = DB::table('orders')->whereRaw('price > IF(state = "TX", ?, 100)', [200])->get();
  1. havingRaw / orHavingRaw : 将原生字符串作为 「having」 语句的值
$orders = DB::table('orders')->select('department', DB::raw('SUM(price) as total_sales'))->groupBy('department')->havingRaw('SUM(price) > ?', [2500])->get();
  1. orderByRaw : 将原生字符串设置为 「order by」 语句的值
$orders = DB::table('orders')->orderByRaw('updated_at - created_at DESC')->get();
  1. groupByRaw : 将原生字符串设置为 group by 语句的值
$orders = DB::table('orders')->select('city', 'state')->groupByRaw('city, state')->get();

Joins

  1. Inner Join 语句
$users = DB::table('users')->join('contacts', 'users.id', '=', 'contacts.user_id')->join('orders', 'users.id', '=', 'orders.user_id')->select('users.*', 'contacts.phone', 'orders.price')->get();
  1. Left Join / Right Join 语句
$users = DB::table('users')->leftJoin('posts', 'users.id', '=', 'posts.user_id')->get();$users = DB::table('users')->rightJoin('posts', 'users.id', '=', 'posts.user_id')->get();
  1. Cross Join 语句
$sizes = DB::table('sizes')->crossJoin('colors')->get();
  1. 高级 Join 语句
  2. 子连接查询
$latestPosts = DB::table('posts')->select('user_id', DB::raw('MAX(created_at) as last_post_created_at'))->where('is_published', true)->groupBy('user_id');$users = DB::table('users')->joinSub($latestPosts, 'latest_posts', function ($join) {$join->on('users.id', '=', 'latest_posts.user_id');})->get();

Unions

$first = DB::table('users')->whereNull('first_name');$users = DB::table('users')->whereNull('last_name')->union($first)->get();

Where语句

条件查询语句

  1. =
where('votes', '=', 100)
where('votes', 100)
  1. 其他操作符
where('votes', '>=', 100)
where('votes', '<>', 100)
where('name', 'like', 'T%')
  1. 条件数组
where([['status', '=', '1'],['subscribed', '<>', '1'],
])

Or Where 语句

$users = DB::table('users')->where('votes', '>', 100)->orWhere('name', 'John')->get();

select * from users where votes > 100 or (name = ‘Abigail’ and votes > 50)

$users = DB::table('users')->where('votes', '>', 100)->orWhere(function($query) {$query->where('name', 'Abigail')->where('votes', '>', 50);})->get();

Where Not 语句

“whereNot”和“orWhereNot”方法可用于否定给定的一组查询约束

    $products = DB::table('products')->whereNot(function ($query) {$query->where('clearance', true)->orWhere('price', '<', 10);})->get();

其他 Where 语句

  1. whereBetween / orWhereBetween / whereNotBetween / orWhereNotBetween
whereBetween('votes', [1, 100])
  1. whereIn / whereNotIn / orWhereIn / orWhereNotIn
whereIn('id', [1, 2, 3])
  1. whereNull / whereNotNull / orWhereNull / orWhereNotNull
whereNull('updated_at')
  1. whereDate / whereMonth / whereDay / whereYear / whereTime
whereDate('created_at', '2016-12-31')
whereMonth('created_at', '12')
whereDay('created_at', '31')
whereYear('created_at', '2016')
whereTime('created_at', '=', '11:20:45')
  1. whereColumn / orWhereColumn
whereColumn('first_name', 'last_name')
whereColumn('updated_at', '>', 'created_at')
whereColumn([['first_name', '=', 'last_name'],['updated_at', '>', 'created_at'],
])

逻辑分组

select * from users where name = ‘John’ and (votes > 100 or title = ‘Admin’)

$users = DB::table('users')->where('name', '=', 'John')->where(function ($query) {$query->where('votes', '>', 100)->orWhere('title', '=', 'Admin');})->get();

高级 Where 语句

WhereExists语句

$users = DB::table('users')->whereExists(function ($query) {$query->select(DB::raw(1))->from('orders')->whereColumn('orders.user_id', 'users.id');})->get();
//select * from users
//where exists (
//    select 1
//    from orders
//    where orders.user_id = users.id
//)

子查询 Where 语句

//子查询的结果与给定的值进行比较
$users = User::where(function ($query) {$query->select('type')->from('membership')->whereColumn('membership.user_id', 'users.id')->orderByDesc('membership.start_date')->limit(1);
}, 'Pro')->get();
//构建一个“where”子句,将列与子查询的结果进行比较
$incomes = Income::where('amount', '<', function ($query) {$query->selectRaw('avg(i.amount)')->from('incomes as i');
})->get();

Ordering, Grouping, Limit & Offset

  1. orderBy 方法
//要按多列排序,您可以根据需要多次调用 orderBy
orderBy('name', 'desc')
  1. latest 和 oldest 方法 : 默认根据数据表的 created_at 字段进行排序
$user = DB::table('users')->latest()->first();
  1. 随机排序
$randomUser = DB::table('users')->inRandomOrder()->first();
  1. 移除已存在的排序
$query = DB::table('users')->orderBy('name');$unorderedUsers = $query->reorder()->get();
//传递一个列名和排序方式去重新排序整个查询:
$usersOrderedByEmail = $query->reorder('email', 'desc')->get();

分组

groupBy 和 having 方法

groupBy('account_id')
groupBy('first_name', 'status')
having('account_id', '>', 100)
havingBetween('number_of_orders', [5, 15])

laravel数据库: 查询构造器相关推荐

  1. Laravel Database——查询构造器与语法编译器源码分析 (上)

    前言 在前两个文章中,我们分析了数据库的连接启动与数据库底层 CRUD 的原理,底层数据库服务支持原生 sql 的运行.本文以 mysql 为例,向大家讲述支持 Fluent 的查询构造器 query ...

  2. php 查询构造器,Laravel框架查询构造器常见用法总结

    本文实例讲述了Laravel框架查询构造器常见用法.分享给大家供大家参考,具体如下: 查询构造器也是我们使用laravel框架的一项必备技能,上一篇文章我们讲到了如何使用原生增删改查,这一篇我们就来讲 ...

  3. python动态生成数据库表_Python版的数据库查询构造器、ORM及动态迁移数据表。

    Orator Orator提供一个简单和方便的数据库数据处理库. 它的灵感来源于PHP的Laravel框架,借助其思想实现了python版的查询构造器和ORM. 这是完整的文档:http://orat ...

  4. 使用laravel数据库查询结果自动转数组

    在项目中再次碰见laravel中从数据库中查询到的结果是对象,用toArray也不好用,之前改过一次,印象中是在/confing/database.php, 'fetch' => PDO::FE ...

  5. laravel CURD 查询构造器

    插入 更新 删除 查询 Get所有表数据 First 结果集中的第一条 Where whereraw条件 Pluck 结果集中指定的字段 Lists 指定字段(可通过每个字段为下标) Select 指 ...

  6. Laravel 中 查询构造器 where 中拼接 wherein 或者orWhere 的写法

    直接上代码 1: 比如我要查询 符合条件的 部门和 用户 DB::table('user')->where('user_id',20)->whereIn('d_id',[82,83])-& ...

  7. laravel mysql like_Laravel数据库查询中对 like 的值进行转义

    Laravel数据库查询中对 like 的值进行转义 龙行    PHP    2020-8-20    550    0评论 在laravel开发中,如果我们用到like模糊搜索$where[] = ...

  8. python构造器_Python短小精悍的Orator查询构造器

    查询构造器 介绍 这个数据库查询构造器,提供便利的接口可以创建和执行查询操作,可以在大多数数据库中使用. 查询select操作 查询表中所有的数据. users = db.table('users') ...

  9. laravel数据库对象转为数组

    laravel数据库查询Model对象转为数组 我们在使用laravel的eloquent ORM 对数据库进行CRUD操作时,返回给我们的结果不是像TP(3.2版本)那样返回一个数组,而是返回一个对 ...

最新文章

  1. labuladong的算法小抄pdf_推荐两个学算法的 GitHub 项目
  2. 后摩尔定律时代的芯片新选择!
  3. requests模块发送带headers的Get请求和带参数的请求
  4. iOS-UITableView的优化(纯手打原创)
  5. windows系统bat批处理 一键添加共享打印机
  6. Goby内测版和AWVS14最新版联合教程详细说明
  7. mysql 获取昨天日期、今天日期、明天日期以及前一个小时和后一个小时的时间
  8. flashfxp怎么传文件,小编教你flashfxp怎么传文件
  9. Linux——根目录结构
  10. 提升WordPress 打开速度全面解决方案
  11. php 5.0入门系列教程 pdf,ThinkPHP5.0-快速入门手册(新手教程版).pdf
  12. PyQt5 文件保存对话框
  13. 2021-08-22dc6靶机实战wp插件漏洞利用+suid提权+rockyou+sudo -l换命令写shell+nmap运行nse提权(转)
  14. 基于单片机的电压电流表设计
  15. 红黑树的历史和由来。
  16. 解决XWPFRun的addPicture方法无法显示图片的问题
  17. 极光行动_流量分析_漏洞复现
  18. DP4301— 国产 SUB-1G 高集成度无线收发芯片
  19. Unity批量预设体替换材质球
  20. python socket自动重连_python – 如何在autobahn websocket超时后重新连接?

热门文章

  1. 2022app出海:Instagram营销策略详解
  2. 使用python3.0 对接美团接口
  3. Mac下载Navicat premium提示文件损坏的解决方案
  4. python——使用opencv修改证件照的背景颜色
  5. [Git]使用命令行更改用户名和邮箱
  6. UE4 射击游戏(游戏机制完善中)
  7. 商用WIFI的发展趋势与前景
  8. python早餐组合
  9. 小米手环 8参数 小米手环 8评测
  10. 一篇就够用了——深度学习Ubuntu16.04环境配置+Win10双系统