Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel雄辩键映射_Php_Laravel_Eloquent - Fatal编程技术网

Php Laravel雄辩键映射

Php Laravel雄辩键映射,php,laravel,eloquent,Php,Laravel,Eloquent,我正在寻找一种简单的方法来更改/标准化从Eloquent返回的密钥。此时,我的应用程序和数据库已经很旧了。我正在构建一组新的API来与数据交互,但更改数据库根本不是一个选项。作为替代方案,我只想在select查询上映射字段名 将给定的响应视为当前返回的响应: [ 'companyrecordid': 1234, 'clientid': 2345, 'name': 'Some cool company', 'street_address': '1234 N. Now

我正在寻找一种简单的方法来更改/标准化从Eloquent返回的密钥。此时,我的应用程序和数据库已经很旧了。我正在构建一组新的API来与数据交互,但更改数据库根本不是一个选项。作为替代方案,我只想在select查询上映射字段名

将给定的响应视为当前返回的响应:

[
    '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。