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新手上路(四)
Oct 09 PHP
php对称加密算法示例
May 07 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
Jul 28 PHP
基于PHP实现等比压缩图片大小
Mar 04 PHP
100行PHP代码实现socks5代理服务器
Apr 28 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
May 31 PHP
iOS10推送通知开发教程
Sep 19 PHP
超强多功能php绿色集成环境详解
Jan 25 PHP
深入浅析PHP的session反序列化漏洞问题
Jun 15 PHP
Thinkphp5结合layer弹窗定制操作结果页面
Jul 07 PHP
Yii2框架可逆加密简单实现方法
Aug 25 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
基于asp+ajax和数据库驱动的二级联动菜单
2010/05/06 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
PHP生成唯一订单号
2015/07/05 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
php实现的生成排列算法示例
2019/07/25 PHP
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
原生javaScript实现图片延时加载的方法
2014/12/22 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
Vue2.x Todo之自定义指令实现自动聚焦的方法
2019/01/08 Javascript
如何正确理解vue中的key详解
2019/11/02 Javascript
Vue组件化开发之通用型弹出框的实现
2020/02/28 Javascript
Python数据结构之Array用法实例
2014/10/09 Python
Python中实现三目运算的方法
2015/06/21 Python
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
python对excel文档去重及求和的实例
2018/04/18 Python
python实现俄罗斯方块游戏
2020/03/25 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
Python模拟登录之滑块验证码的破解(实例代码)
2019/11/18 Python
浅谈python3 构造函数和析构函数
2020/03/12 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
Python 使用Opencv实现目标检测与识别的示例代码
2020/09/08 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
影视制作岗位职责
2013/12/04 职场文书
大学学风建设方案
2014/05/04 职场文书
行政复议决定书
2015/06/24 职场文书
重阳节座谈会主持词
2015/07/03 职场文书
护士旷工检讨书
2015/08/15 职场文书
tp5使用layui实现多个图片上传(带附件选择)的方法实例
2021/11/17 PHP