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 相关文章推荐
实现树状结构的两种方法
Oct 09 PHP
php 生成唯一id的几种解决方法
Mar 08 PHP
PHP四舍五入精确小数位及取整
Jan 14 PHP
PHP图片处理之图片背景、画布操作
Nov 19 PHP
FastCGI 进程意外退出造成500错误
Jul 26 PHP
PHP使用缓存即时输出内容(output buffering)的方法
Aug 03 PHP
PHP脚本自动识别验证码查询汽车违章
Dec 20 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
Laravel实现定时任务的示例代码
Aug 10 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
Nov 08 PHP
laravel执行php artisan migrate报错的解决方法
Oct 09 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
使用sockets:从新闻组中获取文章(一)
2006/10/09 PHP
php文件操作实例代码
2012/05/10 PHP
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
给Javascript数组插入一条记录的代码
2007/08/30 Javascript
基于jQuery图片平滑连续滚动插件
2009/04/27 Javascript
javascript事件问题
2009/09/05 Javascript
跟我学Nodejs(一)--- Node.js简介及安装开发环境
2014/05/20 NodeJs
JavaScript toUpperCase()方法使用详解
2016/08/26 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
微信小程序 wxapp导航 navigator详解
2016/10/31 Javascript
微信小程序 自定义Toast实例代码
2017/06/12 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
2017/08/09 jQuery
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
[48:30]LGD vs infamous Supermajor小组赛D组 BO3 第一场 6.3
2018/06/04 DOTA
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
2018/03/13 Python
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
python实现一个简单的ping工具方法
2019/01/31 Python
一个可以套路别人的python小程序实例代码
2019/04/09 Python
Python urlopen()和urlretrieve()用法解析
2020/01/07 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
Jupyter加载文件的实现方法
2020/04/14 Python
Python 可视化神器Plotly详解
2020/12/26 Python
盛大二次面试题
2016/11/18 面试题
毕业生自我鉴定范文
2013/11/08 职场文书
迎八一活动主题
2014/01/31 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
五水共治捐款倡议书
2014/05/14 职场文书
竞选班长演讲稿400字
2014/08/22 职场文书
执法作风整顿剖析材料
2014/10/11 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
借钱欠条怎么写
2015/07/03 职场文书
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python
pandas求平均数和中位数的方法实例
2021/08/04 Python