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 采集书并合成txt格式的实现代码
Mar 01 PHP
php中serialize序列化与json性能测试的示例分析
Apr 27 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
Oct 01 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
Sep 06 PHP
基于PHP实现简单的随机抽奖小程序
Jan 05 PHP
php脚本运行时的超时机制详解
Feb 17 PHP
php组合排序简单实现方法
Oct 15 PHP
PHP中overload与override的区别
Feb 13 PHP
php支付宝系列之电脑网站支付
May 30 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
Dec 07 PHP
Laravel 框架路由原理与路由访问实例分析
Apr 14 PHP
PHP论坛实现积分系统的思路代码详解
Jun 01 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
比file_get_contents稳定的curl_get_contents分享
2012/01/11 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
分享十款最出色的PHP安全开发库中文详细介绍
2015/03/22 PHP
php PDO异常处理详解
2016/11/20 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
List the Codec Files on a Computer
2007/06/11 Javascript
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
Javascript URI 解析介绍
2015/03/15 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
使用vue-cli脚手架工具搭建vue-webpack项目
2019/01/14 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
Python实现TCP/IP协议下的端口转发及重定向示例
2016/06/14 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
Pycharm 操作Django Model的简单运用方法
2018/05/23 Python
在Pycharm中调试Django项目程序的操作方法
2019/07/17 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
2019/10/17 Python
PyQt5实现画布小程序
2020/05/30 Python
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
创造美妙香氛体验:Aera扩散器和香水
2018/11/25 全球购物
财政局长自荐信范文
2013/12/22 职场文书
思想专业自荐信范文
2013/12/25 职场文书
建筑结构施工专业推荐信
2014/02/21 职场文书
学生安全责任书模板
2014/07/25 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
亲属关系公证书样本
2015/01/23 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
跑出一片天观后感
2015/06/08 职场文书
pycharm部署django项目到云服务器的详细流程
2021/06/29 Python