Laravel Model 利用 Macroable 为数据模型添加宏能力
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,什么是ThinkSNS ?ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案。产生需求在使用 Laravel 开发 ThinkSNS P
千家信息网最后更新 2025年02月02日Laravel Model 利用 Macroable 为数据模型添加宏能力
什么是ThinkSNS ?
ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案。
产生需求
在使用 Laravel 开发 ThinkSNS Plus 的时候,因为很多功能块都没有写在一个库里面,利用拓展包的形式添加实际功能,里面很多地方也用到了"多态多对多"的关系。问题来了,开发一个问答程序,想要给用户模型增加发布的问题或者回答的关系,起初是继承一份 User 模型,添加了关系,之后就发现问题了,因为用户的 tag 是使用多态多对多的关系,我通过继承的用户模型是无法拿到这种关系数据的因为 ***able_type 是 user 数据模型类名称或者别名。而我继承之后类也就发生改变了。
完成需求
随之想到,在 Laravel 中有一个 Trait 叫做 Macroable 然后发现 Builder 都有这种能力,而 Model 没有,随之也将这个 Trait 添加到要使用的model上,后来发现,如果其他模型也要用是不是也要再添加一次?随之写了一份 Trait :
trait Macroable{ use \Illuminate\Support\Traits\Macroable { __call as macroCall; } /** * Get a relationship value from a method. * * @param string $key * @return mixed * @author Seven Du */ public function getRelationValue($key) { $relation = parent::getRelationValue($key); if (! $relation && static::hasMacro($key)) { return $this->getRelationshipFromMethod($key); } return $relation; } /** * Handle dynamic method calls into the model. * * @param string $method * @param array $parameters * @return mixed * @author Seven Du */ public function __call($method, $parameters) { if (static::hasMacro($method)) { return $this->macroCall($method, $parameters); } return parent::__call($method, $parameters); } /** * Handle dynamic static method calls into the method. * * @param string $method * @param array $parameters * @return mixed */ public static function __callStatic($method, $parameters) { return parent::__callStatic($method, $parameters); }}
只要在要使用的 model 中 use 即可。
使用
有了这个 Trait 那么我们添加到 User 模型中,就可以使用宏能力为其动态添加函数了:
User::macro('questions', function () { return $this->hasMany(Question::class, 'user_id', 'id');});
这样,我们可以直接 :
$questions = $user->questions;
拿到用户发布的所有问题了。
以上代码都来自于ThinkSNS Plus,看完整的开发代码可以看仓库:
GitHub: https://github.com/slimkit/thinksns-plus(开源不易,求 Star )
模型
用户
问题
开发
数据
能力
多态
代码
功能
需求
不易
仓库
函数
创业者
别名
动态
地方
大中小企业
实际
小企业
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
校园网络技术支持与服务
网络技术科技有限公司能开什么票
小白测评数据库百问
大学数据库课程用电脑吗
观脉科技与互联网
jdbc预加载连接数据库
富士通服务器
软件开发用笔记本推荐
软件开发和银行软开
另计划软件开发
excel数据库太大
濮阳软件开发的前景
什么叫智能网络技术
自行申请固定ip架设服务器好吗
戴尔服务器启动不按f1
福建系统软件开发多少钱
新伯乐网络技术
梦想网络技术中心
重庆专业财务软件开发费用
服务器密码设置样表
云服务器 手机管理软件
刑法中关于保护网络安全的规定
数据库模型雪花模型
浙江省网络技术人员工资
网络安全工程师有什么责任
水下图像基准数据库
自己建立数据库集群
认识到网络安全犯罪影响社会
网络安全有关知识
在公司中需要的网络技术