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 header 跳转
Jun 17 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
Jun 25 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
Apr 08 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 PHP
PHP实现更新中间关联表数据的两种方法
Sep 01 PHP
PHP动态输出JavaScript代码实例
Feb 12 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
php连接oracle数据库的核心步骤
May 26 PHP
php面向对象之反射功能与用法分析
Mar 29 PHP
PHP实现动态删除XML数据的方法示例
Mar 30 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 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
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
统计PHP目录中的文件数方法
2019/03/05 PHP
Js 获取当前日期时间及其它操作实现代码
2021/03/04 Javascript
jquery实用代码片段集合
2010/08/12 Javascript
JavaScript小技巧 2.5 则
2010/09/12 Javascript
javascript 学习笔记(八)javascript对象
2011/04/12 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
Knockout visible绑定使用方法
2013/11/15 Javascript
jquery动态添加option示例
2013/12/30 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
2017/05/17 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
jQuery Jsonp跨域模拟搜索引擎
2017/06/17 jQuery
js前端导出Excel的方法
2017/11/01 Javascript
详解vue-cli 接口代理配置
2017/12/13 Javascript
对angularJs中2种自定义服务的实例讲解
2018/09/30 Javascript
vue-父子组件和ref实例详解
2019/11/10 Javascript
python在windows下实现备份程序实例
2014/07/04 Python
Python中处理字符串之isalpha()方法的使用
2015/05/18 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
python 执行终端/控制台命令的例子
2019/07/12 Python
Python 用turtle实现用正方形画圆的例子
2019/11/21 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
在python中使用nohup命令说明
2020/04/16 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
python re模块常见用法例举
2021/03/01 Python
HTML5打开手机扫码功能及优缺点
2017/11/27 HTML / CSS
工作决心书范文
2014/03/11 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
先进个人推荐材料
2014/12/29 职场文书
春节晚会开场白
2015/05/29 职场文书
简短的人生哲理(38句)
2019/08/13 职场文书