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日历程序
Dec 06 PHP
PHP Smarty生成EXCEL文档的代码
Aug 23 PHP
PHP 定界符 使用技巧
Jun 14 PHP
PHP提取数据库内容中的图片地址并循环输出
Mar 21 PHP
php计算十二星座的函数代码
Aug 21 PHP
浅析PHP递归函数返回值使用方法
Feb 18 PHP
PHP5函数小全(分享)
Jun 06 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
Nov 22 PHP
php文件压缩之PHPZip类用法实例
Jun 18 PHP
PHP7下协程的实现方法详解
Dec 17 PHP
PHP+MySQL实现消息队列的方法分析
May 09 PHP
PHP XML Expat解析器知识点总结
Feb 15 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的安全策略
2006/10/09 PHP
PHP防CC攻击实现代码
2011/12/29 PHP
php将12小时制转换成24小时制的方法
2015/03/31 PHP
php实现的日历程序
2015/06/18 PHP
php+ajax无刷新分页实例详解
2015/12/07 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
怎么用javascript进行拖拽
2006/07/20 Javascript
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
Javascript实现CheckBox的全选与取消全选的代码
2010/07/20 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
javascript高级学习笔记整理
2011/08/14 Javascript
js操作table元素实现表格行列新增、删除技巧总结
2015/11/18 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
利用JS提交表单的几种方法和验证(必看篇)
2016/09/17 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
2016/09/17 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
Vue CLI3 开启gzip压缩文件的方式
2018/09/30 Javascript
JS监听滚动和id自动定位滚动
2018/12/18 Javascript
浅谈vant组件Picker 选择器选单选问题
2020/11/04 Javascript
Python写入CSV文件的方法
2015/07/08 Python
Python简单格式化时间的方法【strftime函数】
2016/09/18 Python
Python基本socket通信控制操作示例
2019/01/30 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
Python如何输出百分比
2020/07/31 Python
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
澳大利亚在线性感内衣商店:Fantasy Lingerie
2021/02/07 全球购物
解释一下ArrayList Vector和LinkedList的实现和区别
2013/04/26 面试题
公务员年总结的自我评价
2013/10/25 职场文书
创建服务型党组织实施方案
2014/02/25 职场文书
法人授权委托书
2014/04/03 职场文书
学校花圃的标语
2014/06/18 职场文书
购房协议书范本(无房产证)
2014/10/07 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
Redis持久化与主从复制的实践
2021/04/27 Redis
JavaScript实现班级抽签小程序
2021/05/19 Javascript