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和XSL stylesheets转换XML文档
Oct 09 PHP
php 获得汉字拼音首字母的函数
Aug 01 PHP
PHP开发中常用的字符串操作函数
Feb 08 PHP
ThinkPHP与PHPExcel冲突解决方法
Aug 08 PHP
PHP使用CURL获取302跳转后的地址实例
May 04 PHP
php中Snoopy类用法实例
Jun 19 PHP
php强制下载文件函数
Aug 24 PHP
Yii输入正确验证码却验证失败的解决方法
Jun 06 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
Sep 01 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
Apr 12 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 PHP
Yii框架中使用PHPExcel的方法分析
Jul 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
php dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
2014/06/12 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
PHP使用glob函数遍历目录或文件夹的方法
2014/12/16 PHP
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
Yii中CGridView禁止列排序的设置方法
2016/07/12 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
Opacity.js
2007/01/22 Javascript
JavaScript中String和StringBuffer的速度之争
2010/04/01 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
2013/09/13 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
JavaScript函数的4种调用方法详解
2014/04/22 Javascript
JavaScript中数据结构与算法(一):栈
2015/06/19 Javascript
jQuery实现form表单元素序列化为json对象的方法
2015/12/09 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
BetterScroll 在移动端滚动场景的应用
2017/09/18 Javascript
jQuery自动或手动图片切换效果
2017/10/11 jQuery
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
vueJs实现DOM加载完之后自动下拉到底部的实例代码
2018/08/31 Javascript
7个好用的JavaScript技巧分享(译)
2019/05/07 Javascript
Vue强制组件重新渲染的方法讨论
2020/02/03 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
vue中echarts图表大小适应窗口大小且不需要刷新案例
2020/07/19 Javascript
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
[01:44]Ti10举办地公布
2019/08/25 DOTA
Python实现矩阵转置的方法分析
2017/11/24 Python
python3 requests中使用ip代理池随机生成ip的实例
2018/05/07 Python
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
在matplotlib的图中设置中文标签的方法
2018/12/13 Python
Python Django view 两种return的实现方式
2020/03/16 Python
企业金融服务方案
2014/06/03 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL