2017-02-22 7 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

あなたが好むなら、雄弁な選択句でエイリアスを指定できないことはありません。 –

答えて

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

非常に面白い答えです。 –