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二分法在IP地址查询中的应用
Aug 12 PHP
删除无限分类并同时删除它下面的所有子分类的方法
Aug 08 PHP
PHP 数组和字符串互相转换实现方法
Mar 26 PHP
PHP错误和异长常处理总结
Mar 06 PHP
php+Mysqli利用事务处理转账问题实例
Feb 11 PHP
盘点PHP和ASP.NET的10大对比!
Dec 24 PHP
POST一个JSON格式的数据给Restful服务实例详解
Apr 07 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 PHP
PHP实现微信申请退款功能
Oct 01 PHP
PHP iconv()函数字符编码转换的问题讲解
Mar 22 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
Apr 23 PHP
is_file和file_exists效率比较
Mar 14 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跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
php实现利用phpexcel导出数据
2013/08/24 PHP
php简单防盗链实现方法
2015/07/29 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
2016/10/28 PHP
PHP实现简单日历类编写
2020/08/28 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
Js之软键盘实现(js源码)
2007/01/30 Javascript
JavaScript 对象链式操作测试代码
2010/04/25 Javascript
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
javascript实现树形菜单的方法
2015/07/17 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
2016/07/18 Javascript
js实现图片加载淡入淡出效果
2017/04/07 Javascript
ES6中Class类的静态方法实例小结
2017/10/28 Javascript
three.js加载obj模型的实例代码
2017/11/10 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
JavaScript引用类型Array实例分析
2018/07/24 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
Pandas 同元素多列去重的实例
2018/07/03 Python
python将控制台输出保存至文件的方法
2019/01/07 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
2020/03/14 Python
python模拟哔哩哔哩滑块登入验证的实现
2020/04/24 Python
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
用html5的canvas和JavaScript创建一个绘图程序的简单实例
2016/07/06 HTML / CSS
学校门卫工作职责
2013/12/07 职场文书
战友聚会策划方案
2014/06/13 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
旗帜观后感
2015/06/08 职场文书
化验室安全管理制度
2015/08/06 职场文书