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 相关文章推荐
ADODB的数据库封包程序库
Dec 31 PHP
Smarty+QUICKFORM小小演示
Feb 25 PHP
php简单提示框alert封装函数
Aug 08 PHP
php简单浏览目录内容的实现代码
Jun 07 PHP
PHP响应post请求上传文件的方法
Dec 17 PHP
PHP全局变量与超级全局变量区别分析
Apr 01 PHP
Smarty模板变量调节器用法分析
May 23 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
Feb 17 PHP
thinkPHP实现的联动菜单功能详解
May 05 PHP
PHP分页显示的方法分析【附PHP通用分页类】
May 10 PHP
PDO::prepare讲解
Jan 29 PHP
laravel 字段格式化 modle 字段类型转换方法
Sep 30 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书写安全的脚本代码
2012/02/05 PHP
php二分查找二种实现示例
2014/03/12 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
php实现xml转换数组的方法示例
2017/02/03 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
javascript parseInt 大改造
2009/09/27 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
autoPlay 基于jquery的图片自动播放效果
2011/12/07 Javascript
js 窗口抖动示例
2013/09/04 Javascript
jQuery实现contains方法不区分大小写的方法
2015/02/13 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
2017/03/08 Javascript
深入浅析JavaScript中的RegExp对象
2017/09/18 Javascript
JS+Canvas绘制动态时钟效果
2017/11/10 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
JS运算符简单用法示例
2020/01/19 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
vue v-model的用法解析
2020/10/19 Javascript
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
wxpython中利用线程防止假死的实现方法
2014/08/11 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
Python Django使用forms来实现评论功能
2016/08/17 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
python scipy卷积运算的实现方法
2019/09/16 Python
python字符串下标与切片及使用方法
2020/02/13 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
如何用python 操作zookeeper
2020/12/28 Python
pytorch中index_select()的用法详解
2021/01/06 Python
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
档案接收函范文
2014/01/10 职场文书
幼儿园教师培训方案
2014/02/04 职场文书
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
销售活动策划方案
2014/08/26 职场文书
2016年元旦主持词
2015/07/06 职场文书