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面向对象全攻略 (八)重载新的方法
Sep 30 PHP
php的memcached客户端memcached
Jun 14 PHP
PHP设计模式 注册表模式(多个类的注册)
Feb 05 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
May 12 PHP
php中try catch捕获异常实例详解
Nov 21 PHP
微信API接口大全
Apr 15 PHP
PHP文件上传之多文件上传的实现思路
Jan 27 PHP
PHP5.5迭代生成器用法实例详解
Mar 16 PHP
php基于单例模式封装mysql类完整实例
Oct 18 PHP
thinkphp下MySQL数据库读写分离代码剖析
Apr 18 PHP
laravel异步监控定时调度器实例详解
Jun 21 PHP
PHP 构造函数和析构函数原理与用法分析
Apr 21 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
点评山进PR-D3L三波段收音机
2021/03/02 无线电
PHP+javascript模拟Matrix画面
2006/10/09 PHP
让PHP支持页面回退的两种方法[转]
2007/02/14 PHP
php中设置多级目录session的问题
2011/08/08 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
php递归函数中使用return的注意事项
2014/01/17 PHP
JavaScript常用对象的方法和属性小结
2012/01/24 Javascript
自定义jQuery选项卡插件实例
2013/03/27 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
基于javascript实现listbox左右移动
2016/01/29 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
小程序实现带年月选取效果的日历
2018/06/27 Javascript
浅谈layer弹出层按钮颜色修改方法
2019/09/11 Javascript
Vue快速实现通用表单验证功能
2019/12/05 Javascript
Element Breadcrumb 面包屑的使用方法
2020/07/26 Javascript
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
python 自定义对象的打印方法
2019/01/12 Python
python使用PyQt5的简单方法
2019/02/27 Python
python实现操作文件(文件夹)
2019/10/31 Python
Python pandas 列转行操作详解(类似hive中explode方法)
2020/05/18 Python
怎么快速自学python
2020/06/22 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
美国名表在线商城:Ashford(支持中文)
2019/09/24 全球购物
德国大型箱包和皮具商店:Koffer
2019/10/01 全球购物
经典c++面试题六
2012/01/18 面试题
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
2015教师年度考核评语
2015/03/25 职场文书
通知格式
2015/04/27 职场文书
法制教育观后感
2015/06/17 职场文书
2016中考冲刺决心书
2015/09/22 职场文书
JavaScript 反射学习技巧
2021/10/16 Javascript