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中调用JAVA
Oct 09 PHP
PHP重定向的3种方式
Mar 07 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
PHP生成sitemap.xml地图函数
Nov 13 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
迁移PHP版本到PHP7
Feb 06 PHP
PHP的邮件群发系统phplist配置方法详细总结
Mar 30 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
Apr 02 PHP
Thinkphp开发--集成极光推送
Sep 15 PHP
Laravel学习教程之model validation的使用示例
Oct 23 PHP
PHP使用ActiveMQ实现消息队列的方法详解
May 31 PHP
PHP实现简单的协程任务调度demo示例
Feb 01 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连接Oracle数据库
2006/10/09 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
php生成带logo二维码方法小结
2016/04/08 PHP
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
分页栏的web标准实现
2011/11/01 Javascript
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
jQuery select表单提交省市区城市三级联动核心代码
2014/06/09 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析
2018/01/16 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
2019/03/09 Javascript
详解如何使用微信小程序云函数发送短信验证码
2019/03/13 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
浅析Python中yield关键词的作用与用法
2016/11/29 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
python多任务之协程的使用详解
2019/08/26 Python
mac在matplotlib中显示中文的操作方法
2020/03/06 Python
前端制作动画的几种方式(css3,js)
2016/12/12 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
养殖人员的创业计划书范文
2013/12/26 职场文书
2016大学生暑期社会实践心得体会
2016/01/14 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
MongoDB日志切割的三种方式总结
2021/09/15 MongoDB
Python实现批量将文件复制到新的目录中再修改名称
2022/04/12 Python