Laravel等框架模型关联的可用性浅析
早期开发中,模型关联带来非常大的便利性。同时也提升了数据库查询效率(避免了重复查询,相关解释如laravel的n+1查询问题)。
比如说,获取用户信息的接口,接口中除了要返回user表的数据外,还需要返回类似user_option或者user_info等表的数据。这个时候用laravel的模型关联的形式如下:
classUserModelextendsModel{ protected$table='user'; public$timestamps=false; publicfunctionuserOption() { return$this->hasOne(UserOptionModel::class,'user_id','id'); } publicfunctionfindById(int$user_id) { $res=self::with(['user_option']) ->find($user_id); return$res; } } classUserOptionModelextendsModel{ protected$table='user_option'; public$timestamps=false; }
模型关联从上述代码看,用起来相当便利!
但是当后期,你的系统用户量上去后,不可避免的要用上类似redis这样的缓存。假设用户表需要缓存的话,那么结果可能就是另外一种景象了。
classUserCache{ //获取用户信息 publicstaticfunctionfindById(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缓存。
这种情况下,代码的复杂度就直线上升了!
所以,个人建议在代码开发过程中,不要使用模型关联!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。