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中通过smtp发邮件的类,测试通过
Jan 22 PHP
php下使用SimpleXML 处理XML 文件
Feb 27 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 PHP
php处理斐波那契数列非递归方法
Feb 04 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
Sep 05 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
Sep 25 PHP
php简单浏览目录内容的实现代码
Jun 07 PHP
php网站地图生成类示例
Jan 13 PHP
PHP积分兑换接口实例
Feb 09 PHP
php使用gzip压缩传输js和css文件的方法
Jul 29 PHP
Yii2框架使用计划任务的方法
May 25 PHP
thinkPHP框架中执行事务的方法示例
May 31 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中header跳转使用include包含解决参数丢失问题
2015/05/08 PHP
smarty模板判断数组为空的方法
2015/06/10 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
2017/06/07 PHP
详解PHP中的外观模式facade pattern
2018/02/05 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
js返回上一页并刷新的多种实现方法
2014/02/26 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
从零学习node.js之模块规范(一)
2017/02/21 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
vue编译打包本地查看index文件的方法
2018/02/23 Javascript
nodejs读取并去重excel文件
2018/04/22 NodeJs
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
[16:21]教你分分钟做大人:圣堂刺客
2014/12/03 DOTA
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
Python实现Const详解
2015/01/27 Python
python+mysql实现学生信息查询系统
2019/02/21 Python
python实现键盘输入的实操方法
2019/07/16 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
keras的三种模型实现与区别说明
2020/07/03 Python
努比亚手机官网:nubia
2016/10/06 全球购物
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
英国在线药房和在线医生:LloydsPharmacy
2019/10/21 全球购物
UNIX文件类型
2013/08/29 面试题
生产经理的自我评价分享
2013/11/07 职场文书
小学生元旦感言
2014/02/26 职场文书
同学聚会主持词
2014/03/18 职场文书
消防标语大全
2014/06/07 职场文书
小班教师个人总结
2015/02/05 职场文书
2015年全民创业工作总结
2015/07/23 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
小学数学教学反思范文
2016/02/16 职场文书