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 相关文章推荐
php smarty 二级分类代码和模版循环例子
Jun 16 PHP
PHP获取网址的顶级域名函数代码
Sep 24 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
Jun 21 PHP
php中count获取多维数组长度的方法
Nov 03 PHP
简单说说PHP优化那些事(经验分享)
Nov 27 PHP
优化WordPress中文章与评论的时间显示
Jan 12 PHP
PHP实现简易blog的制作
Oct 24 PHP
kindeditor 加入七牛云上传的实例讲解
Nov 12 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
yii2 开发api接口时优雅的处理全局异常的方法
May 14 PHP
在Laravel中实现使用AJAX动态刷新部分页面
Oct 15 PHP
php将xml转化对象的实例详解
Nov 17 PHP
php获取是星期几的的一些常用姿势
Dec 15 #PHP
Yii2框架中一些折磨人的坑
Dec 15 #PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
Dec 13 #PHP
PHP设计模式之外观模式(Facade)入门与应用详解
Dec 13 #PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
Dec 13 #PHP
laravel通用化的CURD的实现
Dec 13 #PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
Dec 13 #PHP
You might like
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
PHP5函数小全(分享)
2013/06/06 PHP
php使用curl和正则表达式抓取网页数据示例
2014/04/13 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
php源码分析之DZX1.5加密解密函数authcode用法
2015/06/17 PHP
些很实用且必用的小脚本代码
2006/06/26 Javascript
一些相见恨晚的 JavaScript 技巧
2010/04/25 Javascript
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
javaScript 利用闭包模拟对象的私有属性
2011/12/29 Javascript
js制作的鼠标悬浮时产生的下拉框效果
2012/10/27 Javascript
javascript高级编程之函数表达式 递归和闭包函数
2015/11/29 Javascript
Javascript实现单例模式
2016/01/24 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
简单了解JavaScript操作XPath的一些基本方法
2016/06/03 Javascript
jQuery操作cookie
2016/08/08 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
JavaScript EventEmitter 背后的秘密 完整版
2018/03/29 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
微信小程序 如何保持登录状态
2019/08/16 Javascript
决策树的python实现方法
2014/11/18 Python
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
Django ORM 聚合查询和分组查询实现详解
2019/08/09 Python
Python 字符串类型列表转换成真正列表类型过程解析
2019/08/26 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
2019/10/14 Python
解决pycharm同一目录下无法import其他文件
2020/02/12 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
应聘美工求职信
2013/11/07 职场文书
大学生军训自我鉴定范文
2014/09/18 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
浅谈MySql整型索引和字符串索引失效或隐式转换问题
2021/11/20 MySQL
《乙女游戏世界对路人角色很不友好》OP主题曲无字幕动画MV公开
2022/04/05 日漫