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 form 表单传参明细研究
Jul 17 PHP
使用PHP实现二分查找算法代码分享
Jun 24 PHP
ThinkPHP写第一个模块应用
Feb 20 PHP
解析php中两种缩放图片的函数,为图片添加水印
Jun 14 PHP
解析ajax事件的调用顺序
Jun 17 PHP
PHP中ob_start函数的使用说明
Nov 11 PHP
PHP 之 写时复制介绍(Copy On Write)
May 13 PHP
php文件缓存类汇总
Nov 21 PHP
PHP实现PDO的mysql数据库操作类
Dec 12 PHP
PHP单链表的实现代码
Jul 05 PHP
php中二分法查找算法实例分析
Sep 22 PHP
Laravel5.5 动态切换多语言的操作方式
Oct 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
一次编写,随处运行
2006/10/09 PHP
PHP文件上传类实例详解
2016/04/08 PHP
PHP中Cookie的使用详解(简单易懂)
2017/04/28 PHP
jquery 将disabled的元素置为enabled的三种方法
2009/07/25 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
js冒泡法和数组转换成字符串示例代码
2013/08/14 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
JavaScript简单判断复选框是否选中及取出值的方法
2015/08/13 Javascript
javascript实现tab切换特效
2015/11/12 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
AngularJS基础 ng-src 指令简单示例
2016/08/03 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
基于jquery二维码生成插件qrcode
2017/01/07 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
AngularJS的$location使用方法详解
2017/10/19 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
python实现2048小游戏
2015/03/30 Python
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
Python使用gRPC传输协议教程
2018/10/16 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
Django缓存系统实现过程解析
2019/08/02 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
大学生就业自荐书
2014/06/16 职场文书
2015年学校体育工作总结
2015/04/22 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android
MySQL系列之十三 MySQL的复制
2021/07/02 MySQL
Nginx下SSL证书安装部署步骤介绍
2021/12/06 Servers
sql查询语句之平均分、最高最低分及排序语句
2022/05/30 MySQL