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连接数据库代码应用分析
May 29 PHP
PHP的一个基础知识 表单提交
Jul 04 PHP
两个php日期控制类实例
Dec 09 PHP
PHP获取数组长度或某个值出现次数的方法
Feb 11 PHP
PHP扩展开发入门教程
Feb 26 PHP
php强制用户转向www域名的方法
Jun 19 PHP
教你在PHPStorm中配置Xdebug
Jul 27 PHP
PHP自定义函数实现格式化秒的方法
Sep 14 PHP
PHP Include文件实例讲解
Feb 15 PHP
laravel框架实现敏感词汇过滤功能示例
Feb 15 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 07 PHP
一次项目中Thinkphp绕过禁用函数的实战记录
Nov 17 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
使用MaxMind 根据IP地址对访问者定位
2006/10/09 PHP
Fine Uploader文件上传组件应用介绍
2013/01/06 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
javascript下function声明一些小结
2007/12/28 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
深入理解javascript中defer的作用
2013/12/11 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
2015/04/20 Javascript
jQuery菜单插件superfish使用指南
2015/04/21 Javascript
jQuery+ajax实现无刷新级联菜单示例
2015/05/21 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色
2015/11/26 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
2016/01/25 Javascript
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
JavaScript中的ajax功能的概念和示例详解
2016/10/17 Javascript
Bootstrap与Angularjs的模态框实例代码
2017/08/03 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
2019/07/16 Javascript
在node环境下parse Smarty模板的使用示例代码
2019/11/15 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
2020/05/20 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
2020/11/11 Javascript
[02:59]2014DOTA2西雅图国际邀请赛 圆满落幕中国夺冠
2014/07/23 DOTA
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
python实现class对象转换成json/字典的方法
2016/03/11 Python
Python解析并读取PDF文件内容的方法
2018/05/08 Python
python 查找文件名包含指定字符串的方法
2018/06/05 Python
Python 实现一个简单的web服务器
2021/01/03 Python
css3中检验表单的required,focus,valid和invalid样式
2014/02/21 HTML / CSS
使用html5新特性轻松监听任何App自带返回键的示例
2018/03/13 HTML / CSS
什么是Assembly(程序集)
2014/09/14 面试题
毕业生物理教师求职信
2013/10/17 职场文书
高三自我鉴定怎么写
2013/10/19 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书