Laravel Model 利用 Macroable 为数据模型添加宏能力
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,什么是ThinkSNS ?ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案。产生需求在使用 Laravel 开发 ThinkSNS P
千家信息网最后更新 2026年11月01日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安全错误
数据库的锁怎样保障安全
新华互联网科技
江苏根荣互联网科技
互联网巨头科技公司
互联网 科技
华中科技大学互联网
唐信互联网科技 大连
碳银互联网科技有限公司
互联网 视角下的科技创新
科技与互联网的利与弊
成都铂石互联网科技做什么的
苏州五指互联网络科技有限
广州新华互联网科技学校电竞方面
玉溪新华互联网科技好不好
明优互联网科技有限公司
互联网数据科技专业
黑科技 体验场景 互联网大会
科技和互联网行业的特点
现代互联网科技公司
网互联网络科技
武汉亿视互联网科技有限公司
小米移动互联网科技园
互联网 科技公司
互联网科技公司发展
亿策互联网科技
福建科技产业互联网发展
港股科技和互联网
互联网科技实习生岗位
郑州欣桑互联网科技有限公司
湖北辰鑫科技互联网
六子台科技互联网展会