2017-10-29 20 views
0

私が構築したアプリケーションでエクスポート関数を実装しています。一部の値のみを置換するコレクションを変換

エクスポートプロセスは、モデル値のコレクションを取得し、クライアントにダウンロードされたスプレッドシートにエクスポートします。

私のモデルでは、私はuser_idresponsibilityの両方を持っています。これらのフィールドには、ユーザーテーブル(通常は2人の異なるユーザー)にマップされるIDが含まれています。

エクスポート処理中に、user_idresponsibilityの値を、ユーザーIDではなく実際のユーザーの名前に置き換えます。

map()transform()は、私が何を達成するための正しい方法であるように見えますが、私が望むものを達成するためのエレガントな方法はありません。

これは私がこれまで持っているものです。

$forms = Form::where('created_at', '>=', (new Carbon('first day of last month'))->toDateString()) 
         ->where('created_at', '<=', (new Carbon('last day of last month'))->toDateString()) 
         ->get(); 

$forms->transform(function($form) { 
    return [ 
     'responsibility' => is_null($form->responsibility) ? $form->responsibility : $form->personResponsible->name, 
     'user_id' => $form->user->name 
    ]; 
}); 

しかし、これだけ戻り、コレクション内のresponsibilityuser_id - ちょうど、これらの値を更新することとは対照的に。

ここでは、残りの列を返す配列に含めることができますが、これは不要なようです。これを行うにはより良い方法があります。

モデルコレクション内の2つの値をユーザーの名前で最も効率的に置き換えるにはどうすればよいですか?

答えて

1

はちょうどあなたが$フォームのモデルを変換して返すようにしたいvalulesを変更します。

$forms->transform(function($form) { 
     $form->responsibility = is_null($form->responsibility) ? $form->responsibility : $form->personResponsible->name; 
     $form->user_id = $form->user->name; 
     return $form; 
    }); 
+0

それは今あなたがそのようにそれを置くことをとても簡単ですね! – James

関連する問題