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 相关文章推荐
别人整理的服务器变量:$_SERVER
Oct 20 PHP
PHP高级OOP技术演示
Aug 27 PHP
PHP 压缩文件夹的类代码
Nov 05 PHP
一些php技巧与注意事项分析
Feb 03 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
Jan 03 PHP
php中的静态变量的基本用法
Mar 20 PHP
[原创]php获取数组中键值最大数组项的索引值
Mar 17 PHP
php强制下载文件函数
Aug 24 PHP
Yii 2中的load()和save()示例详解
Aug 03 PHP
PHP实现求解最长公共子串问题的方法
Nov 17 PHP
laravel中的一些简单实用功能
Nov 03 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
Nov 25 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
压力如何影响浓缩咖啡品质
2021/03/03 咖啡文化
PHP垃圾回收机制简单说明
2010/07/22 PHP
PHP新手NOTICE错误常见解决方法
2011/12/07 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
一段利用WSH修改和查看IP配置的代码
2008/05/11 Javascript
jQuery入门知识简介
2010/03/04 Javascript
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
JavaScript 继承使用分析
2011/05/12 Javascript
JS原型对象通俗"唱法"
2012/12/27 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
点击显示指定元素隐藏其他同辈元素的方法
2014/02/19 Javascript
两种不同的方法实现js对checkbox进行全选和反选
2014/05/13 Javascript
jQuery回到顶部的代码
2016/07/09 Javascript
前端程序员必须知道的高性能Javascript知识
2016/08/24 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
很棒的vue弹窗组件
2017/05/24 Javascript
从源码看angular/material2 中 dialog模块的实现方法
2017/10/18 Javascript
js读取本地文件的实例
2017/12/22 Javascript
vue-cli设置css不生效的解决方法
2020/02/07 Javascript
Python中使用Inotify监控文件实例
2015/02/14 Python
Python 快速实现CLI 应用程序的脚手架
2017/12/05 Python
python实现百万答题自动百度搜索答案
2018/01/16 Python
Python键盘输入转换为列表的实例
2018/06/23 Python
pytorch: tensor类型的构建与相互转换实例
2018/07/26 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
python实现网站用户名密码自动登录功能
2019/08/09 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
Harrods英国:世界领先的奢侈品百货商店
2020/09/23 全球购物
银行见习期自我鉴定
2014/01/29 职场文书
十佳青年事迹材料
2014/08/21 职场文书
2014年银行员工工作总结
2014/11/12 职场文书
2015年招生工作总结
2015/05/04 职场文书
红白喜事主持词
2015/07/06 职场文书
创业计划书之废品回收
2019/09/26 职场文书
详解Javascript实践中的命令模式
2021/05/05 Javascript