関係の使用のためにトランスフォーマーをネストするエレガントな方法はありますか? コレクションに条件付きで関係モデルを含めることができる REST インターフェイスを構築しようとしています。これまでのところ、私はわずかに成功していますが、トランスフォーマーに関しては少し壊れているようです (私は Laravel 5.1 と Dingo に少し慣れていないことを認めます)。これを可能な限り DRY に保つことを検討しているので、関係や属性が将来変更された場合でも簡単に変更できます。
たとえば、ユーザーが 1 つ以上のメッセージを受信する可能性がある (ユーザー hasMany 受信メッセージ) という単純なシナリオでは、UserTransformer で次のことができます。
<?php
namespace App\Transformers;
use App\Models\User;
use League\Fractal;
class UserTransformer extends Fractal\TransformerAbstract
{
public function transform(User $user)
{
// Transform the basic model
$returnUser = [
'id' => (int) $user->id,
'email' => $user->email,
'role' => $user->role,
'status' => $user->status,
'links' => [
[
'rel' => 'self',
'uri' => '/users/'.$user->id
]
]
];
// Transform relationships, but only if they exist and are requested
if (isset($user->receivedMessages))
{
$returnUser['received_messages'] = [];
foreach ($user->receivedMessages as $msg)
{
$returnUser['received_messages'][] = [
'id' => $msg->id,
'read' => $msg->read,
'content' => $msg->content
];
}
}
return $returnUser;
}
}
この場合、関連する受信メッセージに MesagesTransformer をネスト/適用して出力フォーマットを設定し、すべての REST 出力がすべての関係で一貫性を保つようにします。これは可能ですか?ありがとう!