37 lines
877 B
PHP
37 lines
877 B
PHP
<?php
|
|
|
|
namespace App\Data;
|
|
|
|
use App\Models\User;
|
|
use Spatie\LaravelData\Attributes\DataCollectionOf;
|
|
use Spatie\LaravelData\Data;
|
|
use Spatie\LaravelData\DataCollection;
|
|
use Spatie\LaravelData\Lazy;
|
|
use Spatie\LaravelData\Optional;
|
|
|
|
class UserData extends Data
|
|
{
|
|
public function __construct(
|
|
public int $id,
|
|
public string $name,
|
|
public string $email,
|
|
#[DataCollectionOf(RoleData::class)]
|
|
public Lazy|DataCollection $roles,
|
|
public string $created_at,
|
|
public string $updated_at,
|
|
) {}
|
|
|
|
|
|
public static function fromModel(User $user): self
|
|
{
|
|
return new self(
|
|
$user->id,
|
|
$user->name,
|
|
$user->email,
|
|
Lazy::whenLoaded('roles',$user, fn() => RoleData::collection($user->roles)),
|
|
$user->created_at,
|
|
$user->updated_at,
|
|
);
|
|
}
|
|
}
|