php macro,PHP Laravel框架中macro方法的扩展功能用法

Laravel和marco是什么

Laravel是一套优雅而简洁的PHP Web开发框架,Laravel利用php的特性,实现了一套Macroable的Traits,因此引用了Macroable的类都可以用这个方法来扩展,如Response、Request、Collection。

816f6e1e209337595fb50d704fdda1d1.png

项目背景

本文针对的是使用php的laravel框架。

实际遇到的问题

因业务抽离的原因,拆分了数据库实例,原先项目里一些多对多查询的查询因跨了实例无法用laravel的多对多relation实现。项目中model上层的调用处极多,需求要求短时间内改完。

解决思路

保持model上层调用的地方不变,在model层方法动手。把不能跨实例的多对多方法查询降级为框架支持的一对多或多对一的支持跨实例的查询。Laravel框架用的Eloquent ORM的get方法返回类型是Collection,想办法扩展Collection的功能。

简单的写法如下:<?php

Collection::macro("macro_name", function ($param1, $param2) {

});

为了让整个项目都能使用,将marco的代码放在服务注册提供者里。

如下所示:

app.php里添加$app->register(App\Providers\CollectionMacroServiceProvider::class);

class CollectionMacroServiceProvider extends ServiceProvider

{

public function boot()

{

Collection::macro('macro_name', function () {

//do something

});

}

}

针对需要短时间内修改的需求场景下迫于选择了这种方式,其实更像是补丁的形式,更合理的是需要改上层的数据查询方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值