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 相关文章推荐
不用iconv库的gb2312与utf-8的互换函数
Oct 09 PHP
用PHP查询域名状态whois的类
Nov 25 PHP
php dirname(__FILE__) 获取当前文件的绝对路径
Jun 28 PHP
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
Jun 27 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
Jul 23 PHP
PHP 文件编程综合案例-文件上传的实现
Jul 03 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
Jul 03 PHP
php自动给网址加上链接的方法
Jun 02 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
PHP PDOStatement::bindValue讲解
Jan 30 PHP
浅谈PHP匿名函数和闭包
Mar 08 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 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
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
php删除指定目录的方法
2015/04/03 PHP
php blowfish加密解密算法
2016/07/02 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
Jquery焦点图实例代码
2014/11/25 Javascript
Angularjs material 实现搜索框功能
2016/03/08 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
JQuery实现定时刷新功能代码
2017/05/09 jQuery
基于Node的React图片上传组件实现实例代码
2017/05/10 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
2019/05/28 Javascript
使用Vue实现一个树组件的示例
2020/11/06 Javascript
详解Vue2的diff算法
2021/01/06 Vue.js
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
[03:39]这就是刀塔,我们是冠军!燃情短片讲述我们的DOTA故事
2019/07/02 DOTA
Python判断文件和文件夹是否存在的方法
2015/05/21 Python
Python实现栈的方法
2015/05/26 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
mac使用python识别图形验证码功能
2020/01/10 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
使用phonegap操作数据库的实现方法
2017/03/31 HTML / CSS
德国最大的设计师鞋网上商店:Budapester
2017/12/07 全球购物
物流专业大学应届生求职信
2013/11/03 职场文书
工商技校毕业生自荐信
2013/11/15 职场文书
面包店的创业计划书范文
2014/01/16 职场文书
车辆工程专业求职信
2014/06/14 职场文书
2014年大学宣传部工作总结
2014/12/19 职场文书
党建工作汇报材料
2014/12/24 职场文书
2015年档案管理工作总结
2015/04/08 职场文书
学校教师师德师风承诺书
2015/04/28 职场文书
毕业典礼致辞
2015/07/29 职场文书
创业计划书之花店
2019/09/20 职场文书
Java 在线考试云平台的实现
2021/11/23 Java/Android