Laravel Model 利用 Macroable 为数据模型添加宏能力
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,什么是ThinkSNS ?ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案。产生需求在使用 Laravel 开发 ThinkSNS P
千家信息网最后更新 2025年12月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安全错误
数据库的锁怎样保障安全
达芬奇12数据库
上海思科网络技术有限公司
群英服务器租用
战地1租用服务器没人
河北网络技术分类创新服务
网络安全法规定保护公共数据资源
vfp数据库程序官方正式版
凯旋门租房软件开发
数据库系统是在
服务器时延检测
模具制造与软件开发市场前景
计算机网络技术考试2019
数据库提示单元格的值无效
易语言取数据库到列表框中
关系数据库表中对数据的增删改查
医院网络安全态势感知平台
数据库生成函数
一个游戏服务器能同时在线多少人
服务器通电自启动 缺点
优炫数据库参股公司
psn香港服务器
软件开发环境与工具判断题
网络安全责任书运营商
我的世界街机小游戏服务器推荐
属于数据库技术研究领域的
普通u盘可以安装服务器系统吗
macpro 服务器散热器
反恐怖工作基础数据库
数据库系统e-r图
虚拟主机可以开mc服务器吗