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运行速度的一些小技巧分享
Jul 03 PHP
php后台如何避免用户直接进入方法实例
Oct 15 PHP
PHP迭代器的内部执行过程详解
Nov 12 PHP
浅析PHP程序设计中的MVC编程思想
Jul 28 PHP
PHP文件上传判断file是否己选择上传文件的方法
Nov 10 PHP
使用xampp搭建运行php虚拟主机的详细步骤
Oct 21 PHP
thinkphp框架下实现登录、注册、找回密码功能
Apr 06 PHP
php die()与exit()的区别实例详解
Dec 03 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
Dec 25 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
浅谈Laravel核心解读之Console内核
Dec 02 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
May 29 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实现多服务器共享SESSION数据的方法
2007/03/16 PHP
通用PHP动态生成静态HTML网页的代码
2010/03/04 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
php笔记之:初探PHPcms模块开发介绍
2013/04/26 PHP
php CI框架插入一条或多条sql记录示例
2014/07/29 PHP
php连接微软MSSQL(sql server)完全攻略
2016/11/27 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
php获取用户真实IP和防刷机制的实例代码
2018/11/28 PHP
js TextArea的选中区域处理
2010/12/28 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
网站内容禁止复制和粘贴、另存为的js代码
2014/02/26 Javascript
使用pjax实现无刷新更改页面url
2015/02/05 Javascript
纯JS代码实现一键分享功能
2016/04/20 Javascript
Javascript的无new构建实例详解
2016/05/15 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
Javascript中作用域的详细介绍
2016/10/06 Javascript
基于BootStrap栅格栏系统完成网站底部版权信息区
2016/12/23 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
2018/08/14 Javascript
解决webpack多页面内存溢出的方法示例
2019/10/08 Javascript
Vue的Options用法说明
2020/08/14 Javascript
python爬取NUS-WIDE数据库图片
2016/10/05 Python
python实现FTP服务器服务的方法
2017/04/11 Python
python 如何去除字符串头尾的多余符号
2019/11/19 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
python与idea的集成的实现
2020/11/20 Python
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
测控技术与仪器个人求职信范文
2013/12/30 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
党的群众路线教育实践活动个人整改落实情况汇报
2014/10/28 职场文书
写给医生的感谢信
2015/01/22 职场文书
中学生自我评价范文
2015/03/03 职场文书
2015年卫生局工作总结
2015/07/24 职场文书
修辞手法有哪些?
2019/08/29 职场文书
SQL SERVER触发器详解
2022/02/24 SQL Server
python中字符串String及其常见操作指南(方法、函数)
2022/04/06 Python