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仿ZOL分页类代码
Oct 02 PHP
PHP中操作ini配置文件的方法
Apr 25 PHP
解析smarty模板中类似for的功能实现
Jun 18 PHP
360通用php防护代码(使用操作详解)
Jun 18 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
Sep 09 PHP
PHP实现通过get方式识别用户发送邮件的方法
Jul 16 PHP
php冒泡排序与快速排序实例详解
Dec 07 PHP
PHP 7.1新特性的汇总介绍
Dec 16 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
May 11 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
Aug 23 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
May 02 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开发过程中关于继承的使用方法分享
2011/06/17 PHP
浅谈PHP中output_buffering
2015/07/13 PHP
PHP实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
网页加载时页面显示进度条加载完成之后显示网页内容
2012/12/23 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
javaScript实现浮点数转十六进制字符
2013/10/29 Javascript
使用ionic在首页新闻中应用到的跑马灯效果的实现方法
2017/02/13 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
Bootstrap的aria-label和aria-labelledby属性实例详解
2018/11/02 Javascript
javascript实现多边形碰撞检测
2020/10/24 Javascript
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
Python脚本在Appium库上对移动应用实现自动化测试
2015/04/17 Python
在Python中使用列表生成式的教程
2015/04/27 Python
Python的time模块中的常用方法整理
2015/06/18 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
Tesserocr库的正确安装方式
2018/10/19 Python
Python os.access()用法实例
2019/02/18 Python
pycharm new project变成灰色的解决方法
2019/06/27 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
2020/03/10 Python
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
启动一个线程是用run()还是start()
2016/12/25 面试题
设置器与访问器的定义以及各自特点
2016/01/08 面试题
信息技术培训感言
2014/03/06 职场文书
机电系毕业生求职信
2014/07/11 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
天坛导游词
2015/02/02 职场文书
毕业实习感受与体会
2015/05/26 职场文书
合同审查法律意见书
2015/06/04 职场文书
外出学习心得体会范文
2016/01/18 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
python自动化测试之Selenium详解
2022/03/13 Python