laravel 框架结合关联查询 when()用法分析


Posted in PHP onNovember 22, 2019

本文实例讲述了laravel 框架结合关联查询 when()用法。分享给大家供大家参考,具体如下:

Laravel 5.6 里面的when用法:

$name = $request->get('name');               //活动标题
$start_time = $request->get('start_time');         //活动开始时间
$user_name = $request->get('user_name');          //发布者
$limit = (int) $request->get('limit', 15);
$offset = (int) $request->get('offset', 0);
$data=ActiveJieSuan::with(['user' => function ($query) {$query->select('id','name');},
  'active'=> function ($query) {$query->select('id','name','start');}])
  ->when($name, function ($query) use ($name) {
   return $query->whereHas('active', function ($query) use ($name) {
     return $query->where('name', 'like', '%'.$name.'%');
   });
  })
  ->when($user_name, function ($query) use ($user_name) {
   return $query->whereHas('user', function ($query) use ($user_name) {
     return $query->where('name', 'like', '%'.$user_name.'%');
   });
  })
  ->when($start_time, function ($query) use ($start_time) {
   return $query->whereHas('active', function ($query) use ($start_time) {
     return $query->where('start', '>=', $start_time);
   });
  })
  ->limit($limit)
  ->offset($offset)
  ->orderBy('id', 'desc')
  ->paginate()->toArray();

源代码路径: D:\phpStudy\WWW\faceke\vendor\laravel\framework\src\Illuminate\Database\Concerns\BuildsQueries.php

public function when($value, $callback, $default = null)
{ 
  if ($value) { return $callback($this, $value) ?: $this; 
  } elseif ($default) {
  return $default($this, $value) ?: $this; 
  } return $this; 
}

when会判断第一个参数的真与假,如果是真,则执行第一个callback,如果是假,
则执行默认的方法,我的那段代码就只设置了真的时候需要执行的代码,因为条件有三种,
不只有两种。这样的话可以使代码易读性更好,当然也可以拆分子句,
但是when这个用法相对更赞。

laravel 框架结合关联查询 when()用法分析

如上用法直接用关联表中的字段作为搜索条件就更赞了!!!

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php GD绘制24小时柱状图
Jun 28 PHP
快速开发一个PHP扩展图文教程
Dec 12 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
May 02 PHP
php中使用cookie来保存用户登录信息的实现代码
Mar 08 PHP
phpcms模块开发之swfupload的使用介绍
Apr 28 PHP
微信营销平台系统?刮刮乐的开发
Jun 10 PHP
php实现微信公众平台账号自定义菜单类
Dec 02 PHP
用PHP生成excel文件到指定目录
Jun 22 PHP
PHP Oauth授权和本地加密实现方法
Aug 12 PHP
windows7配置Nginx+php+mysql的详细教程
Sep 04 PHP
php UNIX时间戳用法详解
Feb 16 PHP
关于laravel 子查询 & join的使用
Oct 16 PHP
PHP实现微信提现功能(微信商城)
Nov 21 #PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 #PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 #PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
Nov 19 #PHP
使用PHP开发留言板功能
Nov 19 #PHP
关于Laravel参数验证的一些疑与惑
Nov 19 #PHP
php传值和传引用的区别点总结
Nov 19 #PHP
You might like
PHP的可变变量名的使用方法分享
2012/02/05 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
PHP7 参数处理机制修改
2021/03/09 PHP
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
JavaScript中的原型prototype属性使用详解
2015/06/05 Javascript
JavaScript事件代理和委托详解
2016/04/08 Javascript
JS实现根据文件字节数返回文件大小的方法
2016/08/02 Javascript
jquery判断iPhone、Android设备类型
2016/09/14 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
微信小程序 如何保持登录状态
2019/08/16 Javascript
Nuxt使用Vuex的方法示例
2019/09/06 Javascript
python和shell变量互相传递的几种方法
2013/11/20 Python
浅谈Python的Django框架中的缓存控制
2015/07/24 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
python多行字符串拼接使用小括号的方法
2020/03/19 Python
详解python的sorted函数对字典按key排序和按value排序
2018/08/10 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
Python实现AI换脸功能
2020/04/10 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
生产车间班组长岗位职责
2014/01/06 职场文书
元旦活动感言
2014/03/08 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
学校运动会广播稿范文
2014/10/02 职场文书
财务人员个人工作总结
2015/02/27 职场文书
工程质量保证书
2015/05/09 职场文书
惊涛骇浪观后感
2015/06/05 职场文书
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python
Golang使用Panic与Recover进行错误捕获
2022/03/22 Golang
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android
JS前端可扩展的低代码UI框架Sunmao使用详解
2022/07/23 Javascript