Php Laravel雄辩键映射
我正在寻找一种简单的方法来更改/标准化从Eloquent返回的密钥。此时,我的应用程序和数据库已经很旧了。我正在构建一组新的API来与数据交互,但更改数据库根本不是一个选项。作为替代方案,我只想在select查询上映射字段名 将给定的响应视为当前返回的响应:Php Laravel雄辩键映射,php,laravel,eloquent,Php,Laravel,Eloquent,我正在寻找一种简单的方法来更改/标准化从Eloquent返回的密钥。此时,我的应用程序和数据库已经很旧了。我正在构建一组新的API来与数据交互,但更改数据库根本不是一个选项。作为替代方案,我只想在select查询上映射字段名 将给定的响应视为当前返回的响应: [ 'companyrecordid': 1234, 'clientid': 2345, 'name': 'Some cool company', 'street_address': '1234 N. Now
[
'companyrecordid': 1234,
'clientid': 2345,
'name': 'Some cool company',
'street_address': '1234 N. Nowhere'
]
预期的结果将是:
[
'id': 1234,
'clientId': 2345,
'name': 'Some cool company',
'streetAddress': '1234 N. Nowhere'
]
在一个理想的世界里,如果这像在我的模型中添加一个变量一样简单,那将是令人惊讶的。。。比如:
protected static $keymap = [
'companyrecordid' => 'id',
'clientid' => 'clientId',
'street_address' => 'streetAddress',
];
如果没有像这样的东西存在,我不会反对自己写它,我只是不想在没有理由的情况下重新发明轮子。你可以用变异体做这个名称转换你可以用变异体做这个名称转换我认为宏就是你的答案。由于您正在构建一个API,您将返回大部分JSON响应,因此这里不需要雄辩。视图中不会有任何模型操作 在
App/Providers
中创建服务。我把它叫做KeyMapServiceProvider
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Response;
class KeyMapServiceProvider extends ServiceProvider
{
public function boot()
{
Response::macro('keymaps', function ($old) {
$new = (object)[
'id' => $old->companyrecordid,
'clientId' => $old->clientid,
'street_address' => $old->streetAddress,
];
return Response::make($new);
});
}
}
然后在你的应用程序中的任何地方
$data = DB::table('data')->get();
return response()->keymaps($data);
你可能需要做一些调整。但这就是这里的大部分。
来源:我认为宏是你的答案。由于您正在构建一个API,您将返回大部分JSON响应,因此这里不需要雄辩。视图中不会有任何模型操作 在
App/Providers
中创建服务。我把它叫做KeyMapServiceProvider
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Response;
class KeyMapServiceProvider extends ServiceProvider
{
public function boot()
{
Response::macro('keymaps', function ($old) {
$new = (object)[
'id' => $old->companyrecordid,
'clientId' => $old->clientid,
'street_address' => $old->streetAddress,
];
return Response::make($new);
});
}
}
然后在你的应用程序中的任何地方
$data = DB::table('data')->get();
return response()->keymaps($data);
你可能需要做一些调整。但这就是这里的大部分。
来源:分形!我发现,或者说是针对分形,我现在正在玩它。对于理论上应该很简单的东西来说,这似乎相当沉重。在laravel之前,我会做一些类似的事情:“选择companyrecordid作为id,clientid作为clientid…”好吧,如果您喜欢的话,没有什么可以阻止您在雄辩的SELECT子句中指定别名。如果您使用的是laravel 5,那么有一个可映射的分形!我发现,或者说是针对分形,我现在正在玩它。对于理论上应该很简单的东西来说,这似乎相当沉重。在laravel之前,我会做一些类似的事情:“选择companyrecordid作为id,clientid作为clientid…”好吧,如果你喜欢的话,没有什么可以阻止你在雄辩的SELECT子句中指定别名。如果你使用的是laravel 5,当然有这个可映射的,但看起来变种只是用来获取和设置值的,如果只是为了API响应而从控制器返回一个集合呢?这是正式的方法。或者,您也可以拥有自己的小转换实用程序,它使用
array\u map()
重命名键。不要仅仅为了这个用例而引入外部库。当然,但似乎变异子只是为了获取和设置值,那么当您只是为了API响应而从控制器返回一个集合时呢?这是官方的方法。或者,您也可以拥有自己的小转换实用程序,它使用array\u map()
重命名键。不要只为这个用例引入外部库。非常有趣的答案Eddy。非常有趣的答案Eddy。