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 相关文章推荐
Mysql的常用命令
Oct 09 PHP
mysql 的 like 问题,超强毕杀记!!!
Jan 18 PHP
PHP 数组遍历方法大全(foreach,list,each)
Jun 30 PHP
PHP程序漏洞产生的原因分析与防范方法说明
Mar 06 PHP
微信营销平台系统?刮刮乐的开发
Jun 10 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
Sep 29 PHP
php通过array_merge()函数合并两个数组的方法
Mar 18 PHP
优化WordPress的Google字体以加速国内服务器上的运行
Nov 24 PHP
ThinkPHP 模板substr的截取字符串函数详解
Jan 09 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
Feb 13 PHP
浅谈php调用python文件
Mar 29 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
星际争霸任务指南——人族
2020/03/04 星际争霸
PHP Google的translate API代码
2008/12/10 PHP
javascript 学习之旅 (2)
2009/02/05 Javascript
JavaScript 高效运行代码分析
2010/03/18 Javascript
IE 当eval遇上function的处理
2011/08/09 Javascript
JavaScript解析URL参数示例代码
2013/08/12 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
window.onload使用指南
2015/09/13 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
2016/09/20 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
js判断手机号是否正确并返回的实现代码
2017/01/17 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
vue.js 微信支付前端代码分享
2018/02/10 Javascript
Vue2.0系列之过滤器的使用
2018/03/01 Javascript
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
好用的Python编辑器WingIDE的使用经验总结
2016/08/31 Python
python实现人脸识别代码
2017/11/08 Python
python的socket编程入门
2018/01/29 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
替换python字典中的key值方法
2018/07/06 Python
浅谈python下tiff图像的读取和保存方法
2018/12/04 Python
python之拟合的实现
2019/07/19 Python
elasticsearch python 查询的两种方法
2019/08/04 Python
python文件及目录操作代码汇总
2020/07/08 Python
真正的英国宝藏:Mappin & Webb
2019/05/05 全球购物
Paper Cape官网:美国婴儿和儿童服装品牌
2019/11/02 全球购物
公务员的自我鉴定
2013/10/26 职场文书
物流专员岗位职责
2014/02/17 职场文书
电台实习生求职信
2014/02/25 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
机关干部作风建设剖析材料
2014/10/23 职场文书
检讨书范文大全
2015/05/07 职场文书
《揠苗助长》教学反思
2016/02/20 职场文书
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android