一、获取单条
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 查询语句相关推荐

  1. PHP 项目中单独使用 Laravel Eloquent 查询语句来避免 SQL 注入

    OWASP (Open Web Application Security Project) 是一个记录当前 web 应用所受威胁情况的项目.我一直都在关注他们的网站,从 2010,2013 和 201 ...

  2. laravel mysql注入_PHP 项目中单独使用 Laravel Eloquent 查询语句来避免 SQL 注入

    OWASP (Open Web Application Security Project) 是一个记录当前 web 应用所受威胁情况的项目.我一直都在关注他们的网站,从 2010,2013 和 201 ...

  3. Laravel 多条件 where 查询语句

    在使用 Laravel 开发应用的时候,还是会经常遇到多条件的查询语句,比如一个网站的商品筛选页面就有可能是这样子: http://jd.com/products?color=black&si ...

  4. mysql报错:Column 'id' in field list is ambiguous,以及tp的三表联合查询语句,打印sql等

    一.报错信息 1.报错信息 单纯的根据报错信息,意思是在联合查询中,这几个表的都有id值,mysql在执行查询中,不能分辨id是属于哪个表的. 解决方案: 1.修改表字段,不要都叫id (这个方案不好 ...

  5. MySQL查询语句执行的过程

    背景 过程概览 查询缓存query cache 查询管理器 查询解析器语法解析器和查询重写器 查询解析器语法解析器 查询重写器 查询优化器 存取路径 联接运算符 查询执行器查询执行引擎 返回结果给客户 ...

  6. 使用 Orator 将你的 SQL 转换为 Laravel Query 语句

    本文翻译整理至 Convert Your SQL to Laravel Builder with Orator 介绍 你可以可以使用 Orator(Maurice Calhoun 的在线工具)轻松的将 ...

  7. groovy怎样从sql语句中截取表名_SQL常用的基础查询语句

    数据分析过程中,我们经常可以看到提数的SQL语句,了解SQL常用的基础查询语句,是检验提数逻辑是否正确的途径之一,并且也能更方便使用SMART BI数据分析工具.今天就让小编带大家走进SQL基础查询的 ...

  8. Oracle中分页查询语句

    Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用. ...

  9. hibernate中的hql查询语句list查询所有与iterate查询所有的区别

    hibernate中的hql查询语句list查询所有与iterate查询所有的区别 list查询所有: 01,会立即产生一条select语句1select查询出来的所有语句都会被session管理, ...

  10. SQL查询语句 select 详解

    查询select: 1.单表查询 2.多表查询 3.嵌套查询分类 1)单表查询 2)多表查询 A.连接查询 B.子查询 ①一般子查询 ②相关子查询*************************** ...

最新文章

  1. java 组合框_Java知多少(88)列表和组合框
  2. 我们梳理了一下VR教育,感觉它将会是下一个蓝海
  3. polymer 绑定html元素,使用在Polymer元素内的light dom中定义的模板
  4. 2008.02.05
  5. yum方式安装android_linux yum 命令 详解
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的高校学习智能管理论坛系统
  7. Valid Parentheses
  8. 1200万!硅谷AI大牛一年赚够北京二环一套房
  9. android内核中Kconfig及如何加自己的驱动
  10. 为什么说红黑树是“近似平衡”的?
  11. 一些用CRF做图像语义分割的资源
  12. 大集训的第二个小总结
  13. SEO人员,不要见风是雨
  14. word中的左拐箭头和向下箭头的差别
  15. ex10_8金融应用:货币单位
  16. 系统集成项目管理工程师(一)
  17. 计算机操作系统概述---目标、作用、功能、特性和发展过程
  18. html制作日程安排,在线日程安排怎样做?日程表在线制作工具
  19. 网络地址快速计算方法:IP地址24位-30位掩码绕过二进制计算迅速得到网络地址
  20. 2019年,你必须知道的7个企业服务趋势

热门文章

  1. 移动应用支付宝开发创建应用_2020年可与十大移动应用开发公司合作
  2. android高德地图 画质,高德导航地图端口和分辨率修改
  3. Tensorflow Saver
  4. 广州智能服务机器人展览会 | 2016人工智能展
  5. Brain Predicted Age (一)
  6. wordpress主题开发教程
  7. 一般app测试的最佳方法
  8. linux cp omitting 复制,Linux中复制目录报错cp:omitting directory的解决办法
  9. dell服务器型号t310,Dell T110/R210/T310/R310服务器 For Windows驱动程序
  10. 《Deep Semantic Feature Learning for Software Defect Prediction》论文笔记