Laravel等框架模型关联的可用性浅析


Posted in PHP onDecember 15, 2019

早期开发中,模型关联带来非常大的便利性。同时也提升了数据库查询效率(避免了重复查询,相关解释如 laravel 的 n+1 查询问题)。

比如说,获取用户信息的接口,接口中除了要返回 user 表的数据外,还需要返回类似 user_option 或者 user_info 等表的数据。这个时候用 laravel 的模型关联的形式如下:

class UserModel extends Model {
  protected $table = 'user';
  public $timestamps = false;
  
  public function userOption()
  {
    return $this->hasOne(UserOptionModel::class , 'user_id' , 'id');
  }
  
  public function findById(int $user_id)
  {
    $res = self::with(['user_option'])
      ->find($user_id);
    return $res;
  }
}

class UserOptionModel extends Model {
  protected $table = 'user_option';
  public $timestamps = false;
}

模型关联从上述代码看,用起来相当便利!

但是当后期,你的系统用户量上去后,不可避免的要用上类似 redis 这样的缓存。假设用户表需要缓存的话,那么结果可能就是另外一种景象了。

class UserCache {
  // 获取用户信息
  public static function findById(int $user_id)
  {
    // 获取缓存数据
    $user = Redis::string('user_' . $user_id);
    if (!empty($user)) {
      return $user;
    }
    $res = UserModel::findById($user_id);
    Redis::string('user_' . $user_id , $res);
    return $res;
  }
}

上述代码缓存了用户的信息到 redis,那如果针对某个用户他的 user 表主体信息没有发生改变,但是 user_option 表发生了改变,那么正常也应该删除该用户的 redis 缓存。

这种情况下,代码的复杂度就直线上升了!

所以,个人建议在代码开发过程中,不要使用模型关联!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
基于mysql的论坛(5)
Oct 09 PHP
php 文件上传系统手记
Oct 26 PHP
PHP删除目录及目录下所有文件的方法详解
Jun 06 PHP
教你如何解密 “ PHP 神盾解密工具 ”
Jun 20 PHP
修改destoon会员公司的伪静态中的com目录的方法
Aug 21 PHP
php array_merge函数使用需要注意的一个问题
Mar 30 PHP
PHP中把对象转换为关联数组代码分享
Apr 09 PHP
php解析xml方法实例详解
May 12 PHP
浅析Yii2 GridView实现下拉搜索教程
Apr 22 PHP
php 函数使用可变数量的参数方法
May 02 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
Jun 09 PHP
PHP有序表查找之二分查找(折半查找)算法示例
Feb 09 PHP
php获取是星期几的的一些常用姿势
Dec 15 #PHP
Yii2框架中一些折磨人的坑
Dec 15 #PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 #PHP
详解no input file specified 三种解决方法
Nov 29 #PHP
设定php简写功能的方法
Nov 28 #PHP
如何在centos8自定义目录安装php7.3
Nov 28 #PHP
PHP的new static和new self的区别与使用
Nov 27 #PHP
You might like
PHP 强制性文件下载功能的函数代码(任意文件格式)
2010/05/26 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
javascript 动态添加表格行
2006/06/22 Javascript
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
JS 退出系统并跳转到登录界面的实现代码
2013/06/29 Javascript
php和js对数据库图片进行等比缩放示例
2014/04/28 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
2015/12/29 Javascript
基于React.js实现原生js拖拽效果引发的思考
2016/03/30 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
2019/09/24 Javascript
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
解决vue-router 嵌套路由没反应的问题
2020/09/22 Javascript
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
[00:36]DOTA2上海特级锦标赛 Archon战队宣传片
2016/03/04 DOTA
python实现爬虫下载漫画示例
2014/02/16 Python
python 获取网页编码方式实现代码
2017/03/11 Python
Python之os操作方法(详解)
2017/06/15 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
2018/05/08 Python
Django中自定义admin Xadmin的实现代码
2019/08/09 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
Python3基于plotly模块保存图片表格
2020/08/03 Python
出门问问全球官方商城:Tichome音箱和TicWatch智能手表
2017/12/02 全球购物
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
2014政府领导班子对照检查材料思想汇报(3篇)
2014/09/26 职场文书
辞职信范文大全
2015/03/02 职场文书
2015年音乐教师个人工作总结
2015/05/20 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书
python数据处理之Pandas类型转换
2022/04/28 Python