当前位置: 首页 > Linux

LaravelModel使用Macroable为数据模型添加宏能力

时间:2023-04-06 01:37:55 Linux

【摘要】简单说一下宏能力,这个类是IlluminateSupportTraitsMacroable,它使用重载来实现定义宏的功能,即通过宏静态方法添加回调并定义一个名字。使用__call在当前类没有该函数的情况下执行以该函数名注册的回调。生成需求在使用Laravel开发ThinkSNSPlus时,由于很多功能块并没有写在库中,实际的功能都是以扩展包的形式添加的,很多地方也用到了“多态多对多”的关系。问题来了。我想开发一个问答程序。我想将发布的问题或答案之间的关系添加到用户模型中。起初,我继承了一个用户模型并添加了关系。然后我发现了问题,因为用户的标签使用了多态性。对于多对多关系,我无法通过继承的用户模型获取此关系数据,因为*able_type是用户数据模型类名或别名。而我继承之后,类就变了。完成需求后,想到了Laravel中一个叫做Macroable的Trait,发现Builder有这个能力,而Model没有。然后我将这个Trait添加到要使用的模型中。后来发现,如果其他机型也用了,是不是应该重新添加?然后我写了一个Trait:在你要用的模型中使用就可以了。有了这个Trait,我们就把它添加到User模型中,我们就可以使用宏的能力动态的给它添加函数:这样我们就可以直接:获取用户发布的所有问题。以上代码均来自ThinkSNSPlus。想看完整的开发代码可以看仓库:GitHub:https://github.com/slimkit/th...(开源不易,求Star)ThinkSNS官网:http://thinksns。com获取开源版源码正式版唯一途径:关注公众号“thinksns”回复“开源版”获取最新源码压缩包地址。