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开发工具之vs2005图解
Jan 12 PHP
php str_pad 函数用法简介
Jul 11 PHP
php at(@)符号的用法简介
Jul 11 PHP
PHP中对用户身份认证实现两种方法
Jun 04 PHP
php使用curl抓取qq空间的访客信息示例
Feb 28 PHP
php过滤html标记属性类用法实例
Sep 23 PHP
PHP+jquery实时显示网站在线人数的方法
Jan 04 PHP
php header函数的常用http头设置
Jun 25 PHP
js代码实现微博导航栏
Jul 30 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
Aug 18 PHP
form自动提交实例讲解
Jul 10 PHP
PHP如何使用array_unshift()在数组开头插入元素
Sep 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
Redis在Laravel项目中的应用实例详解
2017/08/11 PHP
JavaScript中的new的使用方法与注意事项
2007/05/16 Javascript
语义化 H1 标签
2008/01/14 Javascript
防止xss和sql注入:JS特殊字符过滤正则
2013/04/18 Javascript
js replace 与replaceall实例用法详解
2013/08/03 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
JavaScript函数的4种调用方法详解
2014/04/22 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
jquery引用方法时传递参数原理分析
2014/10/13 Javascript
JavaScript字符串对象replace方法实例(用于字符串替换或正则替换)
2014/10/16 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
js判断手机号运营商的方法
2015/10/23 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
vue ssr服务端渲染(小白解惑)
2019/11/10 Javascript
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
python判断字符串是否纯数字的方法
2014/11/19 Python
python中Flask框架简单入门实例
2015/03/21 Python
Python 文件管理实例详解
2015/11/10 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
详解用Python调用百度地图正/逆地理编码API
2020/07/02 Python
Python Matplotlib绘图基础知识代码解析
2020/08/31 Python
荣耀商城:HIHONOR
2020/11/03 全球购物
毕业生文员求职信
2013/11/03 职场文书
学院书画协会部门职责
2013/11/28 职场文书
电子商务专业个人的自我评价
2013/12/19 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
导游词之峨眉山
2019/12/16 职场文书
mysql部分操作
2021/04/05 MySQL
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python