Если вы используете результаты в формате JSON, это будет очень легко, если вы внедрите Eloquent Resources
Определите три ресурса следующим образом:
(Примечание: чтобы легко определить ресурс, как показано ниже, выполните:
php artisan make:resource UserRes
Затем измените функцию toArray по своему желанию.
) * +1010 *
UserRes
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class UserRes extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
$user = parent::toArray($request);
$user["roles"] = RolesRes::collection($this->roles);
return $user;
}
}
RolesRes
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class RolesRes extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
$res = parent::toArray($request);
$res["permissions"] = $this->permissions;
return $res;
}
}
PermissionsRes:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class PermissionsRes extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
$perm = parent::toArray($request);
return $perm;
}
}
В моем приложении приведен скриншот с примером результатов при выборке одного пользователя. Обратите внимание на вложение нескольких ролей, для которых есть несколько разрешений.
Снимок экрана с ответом JSON при запросе одного пользователя