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 相关文章推荐
WHOIS类的修改版
Oct 09 PHP
php 随机生成10位字符代码
Mar 26 PHP
Linux编译升级php的详细方法
Nov 04 PHP
提高PHP编程效率的方法
Nov 07 PHP
ThinkPHP之getField详解
Jun 20 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
Dec 23 PHP
PHP实现链式操作的三种方法详解
Nov 16 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 30 PHP
tp5 sum某个字段相加得到总数的例子
Oct 18 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 PHP
php使用event扩展的io复用测试的示例
Oct 20 PHP
详解Laravel制作API接口
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
全国FM电台频率大全 - 29 青海省
2020/03/11 无线电
PHP字符编码问题之GB2312 VS UTF-8解决方法
2011/06/23 PHP
php验证手机号码
2015/11/11 PHP
php getcwd与dirname(__FILE__)区别详解
2016/09/24 PHP
JQuery 前台切换网站的样式实现
2009/06/22 Javascript
jQuery的初始化与对象构建之浅析
2011/04/12 Javascript
提取字符串中年月日的函数代码
2013/11/05 Javascript
js鼠标点击图片切换效果代码分享
2015/08/26 Javascript
Markdown+Bootstrap图片自适应属性详解
2016/05/21 Javascript
prototype与__proto__区别详细介绍
2017/01/09 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
2017/04/26 jQuery
浅谈sass在vue注意的地方
2017/08/10 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
2018/07/11 Javascript
Vue之mixin全局的用法详解
2018/08/22 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
微信小程序页面间传值与页面取值操作实例分析
2019/04/30 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
Vue中rem与postcss-pxtorem的应用详解
2019/11/20 Javascript
关于JavaScript中异步/等待的用法与理解
2020/11/18 Javascript
[01:20]辉夜杯背景故事宣传片《辉夜传说》
2015/12/25 DOTA
python实现2014火车票查询代码分享
2014/01/10 Python
Python 模板引擎的注入问题分析
2017/01/01 Python
Python2和Python3.6环境解决共存问题
2018/11/09 Python
Django-Model数据库操作(增删改查、连表结构)详解
2019/07/17 Python
Python partial函数原理及用法解析
2019/12/11 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
基于keras中的回调函数用法说明
2020/06/17 Python
opencv 阈值分割的具体使用
2020/07/08 Python
网络宣传方案
2014/03/15 职场文书
航空学院求职信
2014/06/11 职场文书
求职自荐信范文(优秀篇)
2015/03/27 职场文书
少年派的奇幻漂流观后感
2015/06/08 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书