laravel 查询语句
一、获取单条
find()使用主键查询一条数据
User::select('id', 'name')->find($id);
1
1
first()选取第一条数据
User::where('id', $id)->first();
User::select('id','name')->where('id', $id)->first();
User::where('id', $id)->first(['id', 'name']); #选字段、少些代码是好习惯
1
2
3
1
2
3
注:laravel把first()和find()转成下边的SQL,并自动加上 limit 1提高效率
SELECT id,name FROM users WHERE id = 67373 LIMIT 1
这两个方法获取得到的是一个 对象 或者 null。
value()获取一条的某一个字段
User::where('id',$id)->value('name');
1
1
注:实际上是生成SELECT name FROM users WHERE id = 67373 LIMIT 1查询后判断有没有这条数据,有则返回name字段,没有返回null。
二、获取多条
get()
User::where('id','<',100)->get(['id','name']);
1
1
注:此方法得到的是一个collection集合,可以直接当做数组获取键名键值等,但是不能直接使用PHP数组的操作方法,需要
User::where('id','<',100)->get(['id','name'])->toArray();转成数组。
pluck()
User::where('id','<',10)->pluck('id'); //得到索引数组
User::where('id','<',10)->pluck('name','id');//得到id=>name的关联数组
1
2
1
2
三、where用法
User::where('id',$id)->first();
User::where('id','!=',$id)->first()
User::whereIn('id',[110,119,120])->get(['name']);
User::whereNotIn('id',[110,119,120])->get(['name']);
1
2
3
4
1
2
3
4
四、order by用法
User::orderBy('created_at')->get(['id','name']);
User::orderBy('created_at','desc')->get(['id','name']);
User::orderByDesc('created_at')->get(['id','name']);
1
2
3
1
2
3
五、with、has及whereHas
关联模型,参考
假设有一个订单表订单od_id,用户u_id,类型od_type。
// User模型里:与Order模型一对多关系关联方法。
class User extends Model{
//属性设置...
public function orders(){
return $this->hasMany(Order::class,'u_id','id');
}
}
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
1.查询所有用户及关联订单。
User::with('orders:u_id,od_id')->get(['id','name']);
#“方法名:字段1,字段2...”的形式,注意的是选取的字段里必须包含与user关联的字段,即u_id
1
2
1
2
2.查询所有用户及关联订单中类型为3的。
$type = 3;
User::with(['orders'=>function($query) use($type) {
$query->select('u_id','od_id','od_type')->where('od_type',$type);
}])
->get(['id','name']);
#也可以是数组闭包形式再次筛选,参数使用use传递。
1
2
3
4
5
6
1
2
3
4
5
6
3.查询有订单的用户及关联订单
订单影响用户,排除关联不到订单的用户。
本例中,2或者3都是whereHas不加条件,和has没有什么区别。
1. User::with('orders:od_id,u_id')->has('orders')->get(['id','name']);
2. User::with('orders:od_id,u_id')->whereHas('orders')->get(['id','name']);
3. User::with('orders:od_id,u_id')
->whereHas('orders',function($query){
})
->get(['id','name']);
1
2
3
4
5
6
1
2
3
4
5
6
1.select `id`, `name` from `users` where exists
(select * from `orders` where `users`.`id` = `orders`.`u_id`)
2.select * from `orders` where `orders`.`u_id` in ('1', '2')
1
2
3
1
2
3
4.查询有订单的用户,筛选出订单类型为3的订单。
只要有订单用户就显示,但是订单只显示类型3的,没有是空集合(hasOne时为null)。
对关联进行筛选,不影响外层。
User::with(['orders' => function($query){
$query->select('od_id','u_id','od_type')->where('od_type',3);
}])
->has('orders')
->get(['id','name']);
1
2
3
4
5
1
2
3
4
5
1.select `id`, `name` from `users` where exists
(select * from `orders` where `users`.`id` = `orders`.`u_id`)
2.select * from `orders` where `orders`.`u_id` in ('1', '2') and `type` = '2'
1
2
3
1
2
3
5.查询有订单并且含有订单类型为3的用户。
当前用户订单里没有类型为3的,外层用户也不显示。
当前用户订单只要有类型为3的,非类型为3的订单也显示。
对关联进行含有判断(看样子不是筛选),影响外层。
User::with('orders:od_id,u_id,od_type')
->whereHas('orders',function($query){
$query->where('od_type',3);
})
->get(['id','name']);
1
2
3
4
5
1
2
3
4
5
1.select `id`, `name` from `users` where exists
(select * from `orders` where `users`.`id` = `orders`.`u_id` and `type` = '1')
2.select * from `orders` where `orders`.`u_id` in ('1')
1
2
3
1
2
3
六、offset和limit
每页10条,第3页
User::orderByDesc('created_at')->offset((3-1)*10)->limit(10)->get();
1
1
————————————————
版权声明:本文为CSDN博主「voyager67373」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/z772532526/article/details/82775977
laravel 查询语句相关推荐
- PHP 项目中单独使用 Laravel Eloquent 查询语句来避免 SQL 注入
OWASP (Open Web Application Security Project) 是一个记录当前 web 应用所受威胁情况的项目.我一直都在关注他们的网站,从 2010,2013 和 201 ...
- laravel mysql注入_PHP 项目中单独使用 Laravel Eloquent 查询语句来避免 SQL 注入
OWASP (Open Web Application Security Project) 是一个记录当前 web 应用所受威胁情况的项目.我一直都在关注他们的网站,从 2010,2013 和 201 ...
- Laravel 多条件 where 查询语句
在使用 Laravel 开发应用的时候,还是会经常遇到多条件的查询语句,比如一个网站的商品筛选页面就有可能是这样子: http://jd.com/products?color=black&si ...
- mysql报错:Column 'id' in field list is ambiguous,以及tp的三表联合查询语句,打印sql等
一.报错信息 1.报错信息 单纯的根据报错信息,意思是在联合查询中,这几个表的都有id值,mysql在执行查询中,不能分辨id是属于哪个表的. 解决方案: 1.修改表字段,不要都叫id (这个方案不好 ...
- MySQL查询语句执行的过程
背景 过程概览 查询缓存query cache 查询管理器 查询解析器语法解析器和查询重写器 查询解析器语法解析器 查询重写器 查询优化器 存取路径 联接运算符 查询执行器查询执行引擎 返回结果给客户 ...
- 使用 Orator 将你的 SQL 转换为 Laravel Query 语句
本文翻译整理至 Convert Your SQL to Laravel Builder with Orator 介绍 你可以可以使用 Orator(Maurice Calhoun 的在线工具)轻松的将 ...
- groovy怎样从sql语句中截取表名_SQL常用的基础查询语句
数据分析过程中,我们经常可以看到提数的SQL语句,了解SQL常用的基础查询语句,是检验提数逻辑是否正确的途径之一,并且也能更方便使用SMART BI数据分析工具.今天就让小编带大家走进SQL基础查询的 ...
- Oracle中分页查询语句
Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用. ...
- hibernate中的hql查询语句list查询所有与iterate查询所有的区别
hibernate中的hql查询语句list查询所有与iterate查询所有的区别 list查询所有: 01,会立即产生一条select语句1select查询出来的所有语句都会被session管理, ...
- SQL查询语句 select 详解
查询select: 1.单表查询 2.多表查询 3.嵌套查询分类 1)单表查询 2)多表查询 A.连接查询 B.子查询 ①一般子查询 ②相关子查询*************************** ...
最新文章
- java 组合框_Java知多少(88)列表和组合框
- 我们梳理了一下VR教育,感觉它将会是下一个蓝海
- polymer 绑定html元素,使用在Polymer元素内的light dom中定义的模板
- 2008.02.05
- yum方式安装android_linux yum 命令 详解
- 基于JAVA+SpringMVC+Mybatis+MYSQL的高校学习智能管理论坛系统
- Valid Parentheses
- 1200万!硅谷AI大牛一年赚够北京二环一套房
- android内核中Kconfig及如何加自己的驱动
- 为什么说红黑树是“近似平衡”的?
- 一些用CRF做图像语义分割的资源
- 大集训的第二个小总结
- SEO人员,不要见风是雨
- word中的左拐箭头和向下箭头的差别
- ex10_8金融应用:货币单位
- 系统集成项目管理工程师(一)
- 计算机操作系统概述---目标、作用、功能、特性和发展过程
- html制作日程安排,在线日程安排怎样做?日程表在线制作工具
- 网络地址快速计算方法:IP地址24位-30位掩码绕过二进制计算迅速得到网络地址
- 2019年,你必须知道的7个企业服务趋势
热门文章
- 移动应用支付宝开发创建应用_2020年可与十大移动应用开发公司合作
- android高德地图 画质,高德导航地图端口和分辨率修改
- Tensorflow Saver
- 广州智能服务机器人展览会 | 2016人工智能展
- Brain Predicted Age (一)
- wordpress主题开发教程
- 一般app测试的最佳方法
- linux cp omitting 复制,Linux中复制目录报错cp:omitting directory的解决办法
- dell服务器型号t310,Dell T110/R210/T310/R310服务器 For Windows驱动程序
- 《Deep Semantic Feature Learning for Software Defect Prediction》论文笔记