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 相关文章推荐
5.PHP的其他功能
Oct 09 PHP
PHP个人网站架设连环讲(二)
Oct 09 PHP
PHP+MYSQL开发工具及资源收藏
Jan 02 PHP
Apache2中实现多网站域名绑定的实现方法
Jun 01 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
Jul 29 PHP
PHP四种基本排序算法示例
Apr 09 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
May 05 PHP
PHP实现执行外部程序的方法详解
Aug 17 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
Apr 23 PHP
php 多个变量指向同一个引用($b = &$a)用法分析
Nov 13 PHP
浅谈Laravel中使用Slack进行异常通知
May 29 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
动漫定律:眯眯眼都是怪物!这些角色狠话不多~
2020/03/03 日漫
对Session和Cookie的区分与解释
2007/03/16 PHP
PHP similar_text 字符串的相似性比较函数
2010/05/26 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
2015/03/19 PHP
PHP Web木马扫描器代码分享
2015/09/06 PHP
php设计模式之装饰模式应用案例详解
2019/06/17 PHP
JavaScript 参考教程
2006/12/29 Javascript
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
用JQuery模仿淘宝的图片放大镜显示效果
2011/09/15 Javascript
利用javaScript实现点击输入框弹出窗体选择信息
2013/12/11 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
JS/Jquery判断对象为空的方法
2015/06/11 Javascript
详解JavaScript中Date.UTC()方法的使用
2015/06/12 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
浅析BootStrap中Modal(模态框)使用心得
2016/12/24 Javascript
javascript监听页面刷新和页面关闭事件方法详解
2017/01/09 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
django站点管理详解
2017/12/12 Python
Python字符串格式化%s%d%f详解
2018/02/02 Python
python根据多个文件名批量查找文件
2019/08/13 Python
Scrapy模拟登录赶集网的实现代码
2020/07/07 Python
python 使用建议与技巧分享(四)
2020/08/18 Python
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
2018/02/07 HTML / CSS
西班牙鞋子和箱包在线销售网站:zapatos.es
2020/02/17 全球购物
临床医学系毕业生推荐信
2013/11/09 职场文书
啤酒节策划方案
2014/05/28 职场文书
镇班子对照检查材料思想汇报
2014/09/24 职场文书
人民的好儿女观后感
2015/06/18 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS
css3新特性的应用示例分析
2022/03/16 HTML / CSS
R9700摩机记
2022/04/05 无线电