laravel 实现根据字段不同值做不同查询


Posted in PHP onOctober 23, 2019

在开发过程中我们经常遇到这种情况:

例如,一个信息表message,字段type 1.操作提醒 2.平台通知,表message_read记录当信息是平台通知时用户浏览状况

那么 当信息是平台通知时是针对的所有用户,我们想根据他是否浏览状态去在消息提醒里去显示他未读的消息

语句如下(laravel)

public function index()
 {
//  监听sql语句
//  DB::listen(function($query) {
//   $bindings = $query->bindings;
//   $sql = $query->sql;
//   foreach ($bindings as $replace){
//    $value = is_numeric($replace) ? $replace : "'".$replace."'";
//    $sql = preg_replace('/\?/', $value, $sql, 1);
//   }
//   dd($sql);
//  });
   $uid = 13; 
   return MessageModel::where(function($query) use($uid){
    $query->where(['type'=>2,'status'=>1,])->whereNotIn('id',function($query) use($uid){
     $query->select('mid')->from('message_read')->where([['message.id','=',DB::raw('mid')],'uid'=>$uid]);
    });
   })->orwhere(function($query) use($uid){
    $query->where(['type'=>1,'status'=>1,'is_read'=>2,'uid'=>$uid]);
   })->get();
 }

数据表格式

CREATE TABLE `message` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `uid` int(11) DEFAULT NULL COMMENT '需要通知的用户id',
 `title` varchar(255) NOT NULL COMMENT '标题',
 `describe` varchar(255) DEFAULT NULL COMMENT '简介',
 `type` tinyint(4) DEFAULT NULL COMMENT '通知类型 1.行为通知 2.平台通知',
 `is_read` tinyint(4) DEFAULT NULL COMMENT '是否已读 1.已读 2.未读',
 `status` tinyint(4) DEFAULT '1' COMMENT '1存在 2删除',
 `created_at` int(11) DEFAULT NULL,
 `updated_at` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COMMENT='消息表';


CREATE TABLE `message_read` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `uid` int(11) DEFAULT NULL COMMENT '用户id',
 `mid` int(11) DEFAULT NULL COMMENT '消息id',
 `created_at` int(11) DEFAULT NULL,
 `updated_at` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT='平台消息通知阅读记录表';

以上这篇laravel 实现根据字段不同值做不同查询就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP安装问题
Oct 09 PHP
php下检测字符串是否是utf8编码的代码
Jun 28 PHP
PHP 写文本日志实现代码
May 18 PHP
PHP写杨辉三角实例代码
Jul 17 PHP
YII模块实现绑定二级域名的方法
Jul 09 PHP
PHP中Header使用的HTTP协议及常用方法小结
Nov 04 PHP
php操作(删除,提取,增加)zip文件方法详解
Mar 12 PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 PHP
PHP 实现浏览记录并按日期分组
May 11 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
Jan 10 PHP
php与阿里云短信接口接入操作案例分析
May 27 PHP
Laravel修改验证提示信息为中文的示例
Oct 23 #PHP
php装饰者模式简单应用案例分析
Oct 23 #PHP
laravel 数据验证规则详解
Oct 23 #PHP
php适配器模式简单应用示例
Oct 23 #PHP
Laravel 自定命令以及生成文件的例子
Oct 23 #PHP
laravel 创建命令行命令的图文教程
Oct 23 #PHP
php桥接模式应用案例分析
Oct 23 #PHP
You might like
PHP实现简单数字分页效果
2015/07/26 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
PHP迭代器和迭代的实现与使用方法分析
2018/04/19 PHP
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
JavaScript基本编码模式小结
2012/05/23 Javascript
禁止页面刷新让F5快捷键及右键都无效
2014/01/22 Javascript
用js一次改变多个input的readonly属性值的方法
2014/06/11 Javascript
js模仿php中strtotime()与date()函数实现方法
2015/08/11 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
简单谈谈json跨域
2016/03/13 Javascript
JavaScript如何实现跨域请求
2016/08/05 Javascript
基于Javascript实现的不重复ID的生成器
2016/12/25 Javascript
socket.io实现在线群聊功能
2017/04/07 Javascript
js防刷新的倒计时代码 js倒计时代码
2017/09/06 Javascript
微信小程序之GET请求的实例详解
2017/09/29 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
浅谈js闭包理解
2019/04/01 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
Python基于matplotlib实现绘制三维图形功能示例
2018/01/18 Python
详解Python中的正斜杠与反斜杠
2019/08/09 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
python利用proxybroker构建爬虫免费IP代理池的实现
2021/02/21 Python
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
ZINVO手表官网:男士和女士手表
2019/03/10 全球购物
荷兰鞋类购物网站:Donelli
2019/05/24 全球购物
幼儿园实习自我鉴定
2013/12/15 职场文书
旅游业大学生创业计划书
2014/01/31 职场文书
园林设计专业毕业生求职信
2014/03/23 职场文书
城市规划应届生推荐信
2014/09/08 职场文书
社团招新宣传语
2015/07/13 职场文书
2019个人工作总结
2019/06/21 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书
docker-compose部署Yapi的方法
2022/04/08 Servers