laravel数据库: 查询构造器
数据库: 查询构造器
获取结果
- 从表中检索所有行
- get
use Illuminate\Support\Facades\DB;$users = DB::table('users')->get();
//可以将列作为对象的属性来访问每列的值
foreach ($users as $user) {echo $user->name;
}
- 从表中检索单行或单列
- 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);
- 获取某一列的值
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;
}
聚合
- count, max, min, avg
- 判断记录是否存在
DB::table('orders')->where('finalized', 1)->count()
DB::table('orders')->where('finalized', 1)->exists()
DB::table('orders')->where('finalized', 1)->doesntExist()
Select 说明
自定义一个 「select」 查询语句来查询指定的字段
- select
$users = DB::table('users')->select('name', 'email as user_email')->get();
- distinct
$users = DB::table('users')->distinct()->get();
- addSelect
$query = DB::table('users')->select('name');
$users = $query->addSelect('age')->get();
原生表达式
- raw
$users = DB::table('users')->select(DB::raw('count(*) as user_count, status'))->where('status', '<>', 1)->groupBy('status')->get();
- selectRaw : 代替 addSelect(DB::raw(…))
$orders = DB::table('orders')->selectRaw('price * ? as price_with_tax', [1.0825])->get();
- whereRaw / orWhereRaw : 将原生的 「where」 注入到你的查询
$orders = DB::table('orders')->whereRaw('price > IF(state = "TX", ?, 100)', [200])->get();
- havingRaw / orHavingRaw : 将原生字符串作为 「having」 语句的值
$orders = DB::table('orders')->select('department', DB::raw('SUM(price) as total_sales'))->groupBy('department')->havingRaw('SUM(price) > ?', [2500])->get();
- orderByRaw : 将原生字符串设置为 「order by」 语句的值
$orders = DB::table('orders')->orderByRaw('updated_at - created_at DESC')->get();
- groupByRaw : 将原生字符串设置为 group by 语句的值
$orders = DB::table('orders')->select('city', 'state')->groupByRaw('city, state')->get();
Joins
- 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();
- 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();
- Cross Join 语句
$sizes = DB::table('sizes')->crossJoin('colors')->get();
- 高级 Join 语句
- 子连接查询
$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语句
条件查询语句
- =
where('votes', '=', 100)
where('votes', 100)
- 其他操作符
where('votes', '>=', 100)
where('votes', '<>', 100)
where('name', 'like', 'T%')
- 条件数组
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 语句
- whereBetween / orWhereBetween / whereNotBetween / orWhereNotBetween
whereBetween('votes', [1, 100])
- whereIn / whereNotIn / orWhereIn / orWhereNotIn
whereIn('id', [1, 2, 3])
- whereNull / whereNotNull / orWhereNull / orWhereNotNull
whereNull('updated_at')
- 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')
- 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
- orderBy 方法
//要按多列排序,您可以根据需要多次调用 orderBy
orderBy('name', 'desc')
- latest 和 oldest 方法 : 默认根据数据表的 created_at 字段进行排序
$user = DB::table('users')->latest()->first();
- 随机排序
$randomUser = DB::table('users')->inRandomOrder()->first();
- 移除已存在的排序
$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数据库: 查询构造器相关推荐
- Laravel Database——查询构造器与语法编译器源码分析 (上)
前言 在前两个文章中,我们分析了数据库的连接启动与数据库底层 CRUD 的原理,底层数据库服务支持原生 sql 的运行.本文以 mysql 为例,向大家讲述支持 Fluent 的查询构造器 query ...
- php 查询构造器,Laravel框架查询构造器常见用法总结
本文实例讲述了Laravel框架查询构造器常见用法.分享给大家供大家参考,具体如下: 查询构造器也是我们使用laravel框架的一项必备技能,上一篇文章我们讲到了如何使用原生增删改查,这一篇我们就来讲 ...
- python动态生成数据库表_Python版的数据库查询构造器、ORM及动态迁移数据表。
Orator Orator提供一个简单和方便的数据库数据处理库. 它的灵感来源于PHP的Laravel框架,借助其思想实现了python版的查询构造器和ORM. 这是完整的文档:http://orat ...
- 使用laravel数据库查询结果自动转数组
在项目中再次碰见laravel中从数据库中查询到的结果是对象,用toArray也不好用,之前改过一次,印象中是在/confing/database.php, 'fetch' => PDO::FE ...
- laravel CURD 查询构造器
插入 更新 删除 查询 Get所有表数据 First 结果集中的第一条 Where whereraw条件 Pluck 结果集中指定的字段 Lists 指定字段(可通过每个字段为下标) Select 指 ...
- Laravel 中 查询构造器 where 中拼接 wherein 或者orWhere 的写法
直接上代码 1: 比如我要查询 符合条件的 部门和 用户 DB::table('user')->where('user_id',20)->whereIn('d_id',[82,83])-& ...
- laravel mysql like_Laravel数据库查询中对 like 的值进行转义
Laravel数据库查询中对 like 的值进行转义 龙行 PHP 2020-8-20 550 0评论 在laravel开发中,如果我们用到like模糊搜索$where[] = ...
- python构造器_Python短小精悍的Orator查询构造器
查询构造器 介绍 这个数据库查询构造器,提供便利的接口可以创建和执行查询操作,可以在大多数数据库中使用. 查询select操作 查询表中所有的数据. users = db.table('users') ...
- laravel数据库对象转为数组
laravel数据库查询Model对象转为数组 我们在使用laravel的eloquent ORM 对数据库进行CRUD操作时,返回给我们的结果不是像TP(3.2版本)那样返回一个数组,而是返回一个对 ...
最新文章
- labuladong的算法小抄pdf_推荐两个学算法的 GitHub 项目
- 后摩尔定律时代的芯片新选择!
- requests模块发送带headers的Get请求和带参数的请求
- iOS-UITableView的优化(纯手打原创)
- windows系统bat批处理 一键添加共享打印机
- Goby内测版和AWVS14最新版联合教程详细说明
- mysql 获取昨天日期、今天日期、明天日期以及前一个小时和后一个小时的时间
- flashfxp怎么传文件,小编教你flashfxp怎么传文件
- Linux——根目录结构
- 提升WordPress 打开速度全面解决方案
- php 5.0入门系列教程 pdf,ThinkPHP5.0-快速入门手册(新手教程版).pdf
- PyQt5 文件保存对话框
- 2021-08-22dc6靶机实战wp插件漏洞利用+suid提权+rockyou+sudo -l换命令写shell+nmap运行nse提权(转)
- 基于单片机的电压电流表设计
- 红黑树的历史和由来。
- 解决XWPFRun的addPicture方法无法显示图片的问题
- 极光行动_流量分析_漏洞复现
- DP4301— 国产 SUB-1G 高集成度无线收发芯片
- Unity批量预设体替换材质球
- python socket自动重连_python – 如何在autobahn websocket超时后重新连接?