2017-02-22 2 views
0

나는 Eloquent에서 반환 된 키를 변경/표준화하는 간단한 방법을 찾고 있습니다. 이 시점에서 내 응용 프로그램과 데이터베이스는 꽤 오래되었습니다. 데이터와 상호 작용할 수있는 새로운 API 세트를 구축 중이지만 데이터베이스를 변경하는 것은 단순히 선택 사항이 아닙니다. 대안으로, 필자는 선택 쿼리에 필드 이름을 매핑하기 만하면됩니다. 그것이 현재 반환로Laravel Eloquent 키 매핑

은 주어진 응답을 가지고 :

[ 
    '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', 
]; 

이와 같은 것이 없으면 직접 작성하는 것에 반대하지 말고, 그렇게 할 이유가 없다면 바퀴를 다시 발명하고 싶지 않습니다.

+0

프랙탈! http://fractal.thephpleague.com/ –

+0

나는 프랙탈을 발견했거나 오히려 프랙탈을 연출했다. 나는 지금 그걸 가지고 놀고있다. 이론적으로 단순해야하는 무언가에 꽤 무거워 보입니다. Pre-laravel과 같이했을 것입니다. 'id로 companyrecordid를 선택하고 clientId로 clientid ...'와 같은 것을했을 것입니다. – jacobfogg

+0

당신이 선호하는 것이 있다면 웅변적인 select 절에서 별칭을 지정할 수 없습니다. –

답변

1

이 이름 변환 내가 매크로가 답이다 생각 https://laravel.com/docs/5.4/eloquent-mutators

+0

이 있습니다.하지만 뮤 테이터는 단순히 값을 가져오고 설정하는 것일뿐입니다. 단순히 돌아 오는 경우는 어떨까요? API 응답을 위해 컨트롤러에서 가져온 컬렉션? – jacobfogg

+0

이것은 공식적인 방법입니다. 양자 택일로, 당신은 또한'array_map()'을 사용하여 키의 이름을 바꾸는 자신 만의 작은 변형 유틸리티를 가질 수 있습니다. 이 용도로만 외부 라이브러리를 도입하지 마십시오. –

0

을 할 뮤 테이터를 사용할 수 있습니다. API를 작성하고 있으므로 대부분 JSON 응답을 반환하므로 여기서 Eloquent를 사용할 필요가 없습니다. 보기에는 모델 조작이 없습니다.

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); 

에서 당신은 몇 가지를 조정할 수 있습니다. 그러나 그것의 대부분은 여기에 있습니다. 출처 : https://laravel.com/docs/5.4/responses#response-macros

+0

아주 재미있는 대답 Eddy. –