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
文章推荐系统(三)
Oct 09 PHP
PHP执行速率优化技巧小结
Mar 15 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
Jan 10 PHP
php和js如何通过json互相传递数据相关问题探讨
Feb 26 PHP
php中的ini配置原理详解
Oct 14 PHP
php中Snoopy类用法实例
Jun 19 PHP
深入浅析php中sprintf与printf函数的用法及区别
Jan 08 PHP
[原创]php实现子字符串位置相互对调互换的方法
Jun 02 PHP
php实现36进制与10进制转换功能示例
Jan 10 PHP
PHP面向对象程序设计之对象的遍历操作示例
Jun 12 PHP
laravel 操作数据库常用函数的返回值方法
Oct 11 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
PHPWind 发帖回帖Api PHP版打包下载
2010/02/08 PHP
PHP生成自适应大小的缩略图类及使用方法分享
2014/05/06 PHP
如何让搜索引擎抓取AJAX内容解决方案
2014/08/25 PHP
thinkPHP中多维数组的遍历方法
2016/01/09 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
2016/03/17 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
基于jquery的图片幻灯展示源码
2012/07/15 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
AngularJS学习笔记之依赖注入详解
2016/05/16 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
如何在AngularJs中调用第三方插件库
2017/05/21 Javascript
angularjs+bootstrap实现自定义分页的实例代码
2017/06/19 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
vue-cli创建的项目,配置多页面的实现方法
2018/03/15 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
node.js中ws模块创建服务端和客户端,网页WebSocket客户端
2019/03/06 Javascript
layui点击按钮页面会自动刷新的解决方案
2019/10/25 Javascript
Node.js 中判断一个文件是否存在
2020/08/24 Javascript
python超简单解决约瑟夫环问题
2015/05/12 Python
Python正则表达式教程之一:基础篇
2017/03/02 Python
python实现自动网页截图并裁剪图片
2018/07/30 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
django之自定义软删除Model的方法
2019/08/14 Python
django框架单表操作之增删改实例分析
2019/12/16 Python
Photobook澳大利亚:制作相片书,婚礼卡,旅行相簿
2017/01/12 全球购物
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
大学毕业生求职自荐书
2014/06/05 职场文书
企业文化口号
2014/06/12 职场文书
武当山导游词
2015/02/03 职场文书
公司内部升职自荐信
2015/03/27 职场文书
大学入学感言
2015/08/01 职场文书