Когда вы используете отношение with()
, результирующая коллекция будет иметь относительные коллекции внутри нее.
В вашем случае:
user_collection
- userdata
.
.
- file_collection
- message_collection
Теперь есть несколько способов, которыми вы можетесделай это:
1.Есть запрос на присоединение:
$users = User::join('messages', 'messaged.user_id', '=', 'users.id')
->join('files', 'files.user_id', '=', 'users.id')
->select('users.name', 'files.size', 'messages.sender')
->get();
2.Отформатируйте данные, используя ресурсы:
Ресурсы - это своего рода преобразователь или модификатор, который возвращает ответ в нужном вам формате.Он стандартизирует ответ так, как вы хотите.
Вы можете создать app\Http\Resources\UserResource.php
:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class User extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'size' => $this->files->size,
'sender' => $this->messages->sender,
'name' => $this->name
];
}
}
И затем внутри контроллера:
return new UserResource(User::find(1));
Преимущество состоит в том, чтоесли вы хотите, чтобы сообщения выглядели определенным образом, вы можете вкладывать классы Resource.В документации есть подробные примеры.