早期开发中,模型关联带来非常大的便利性。同时也提升了数据库查询效率(避免了重复查询,相关解释如 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 缓存。
这种情况下,代码的复杂度就直线上升了!
所以,个人建议在代码开发过程中,不要使用模型关联!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对站长技术的支持。
1. 准备向服务器发送数据 Ajax 最常见的一大用途是向服务器发送数据。最典型的情...
很显然,微软正在给Windows 10的视觉效果进行大调整,其中一个最明显的展现就是...
打开google 搜索"ajaxFileupload' ‘多文件上传"可以搜到许许多多类似的,那我为...
【辰兮要努力】hello你好我是辰兮很高兴你能来阅读昵称是希望自己能不断精进向着...
目录 一、信号概念 二、信号的产生 三、信号的保存 四、信号集函数 五、捕捉信号...
前言 正则表达式是字符串处理工具中强有力的工具.也有人认为这只是一个小玩具,但...
python 多线程 多进程同时运行 多任务要求 python 基础语法 python 文件目录操作...
微信文件传输助手是微信电脑版与手机微信之间相互传输图片等文件的好工具,但很...
对于MySQL而言,其实分为客户端与服务端。 服务端,就是MySQL应用,当我们使用ne...
动手写个小组件(组件入门) 这篇文章主要是为想将自己的ASP水平提高的人写的! 把A...