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 中英文混合排版中处理字符串常用的函数
Apr 12 PHP
php 动态执行带有参数的类方法
Apr 10 PHP
php检测用户是否用手机(Mobile)访问网站的类
Jan 09 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
Jun 19 PHP
PHP实现的简单mock json脚本分享
Feb 10 PHP
php基于GD库画五星红旗的方法
Feb 24 PHP
微信公众平台实现获取用户OpenID的方法
Apr 15 PHP
php使用escapeshellarg时中文被过滤的解决方法
Jul 10 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
Dec 02 PHP
php语言注释,单行注释和多行注释
Jan 21 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
php微信公众号开发之秒杀
Oct 20 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加速 eAccelerator配置和使用指南
2009/06/05 PHP
PHP递归返回值时出现的问题解决办法
2013/02/19 PHP
php小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
PHP中is_dir()函数使用指南
2015/05/08 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
[01:57]2016完美“圣”典风云人物:国士无双专访
2016/12/04 DOTA
Python文本相似性计算之编辑距离详解
2016/11/28 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
python 实现GUI(图形用户界面)编程详解
2019/07/17 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
Django实现简单网页弹出警告代码
2019/11/15 Python
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
巴西家用小家电购物网站:Polishop
2016/08/07 全球购物
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
墨西哥网上超市:Superama
2018/07/10 全球购物
Jack Rogers官网:美国经典的女性鞋靴品牌
2019/09/04 全球购物
综合办公室主任岗位职责
2014/04/13 职场文书
在校实习生求职信
2014/06/18 职场文书
教师个人事迹材料
2014/12/17 职场文书
员工辞职信范文
2015/03/02 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
销售经理岗位职责范本
2015/04/02 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书
2016大学生优秀志愿者事迹材料
2016/02/25 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang