use App\Data\JobData;use App\Data\JobPayloadData;use App\Http\Controllers\Controller;use App\Models\Company;use App\Models\Job;
class CompaniesJobsController extends Controller{ public function store(Company $company, JobPayloadData $jobPayload) { $job = Job::make($jobPayload);
$company->jobs()->save($job);
return JobData::from($job); }}
use App\Enums\JobStatus;use Spatie\LaravelData\Attributes\MapName;use Spatie\LaravelData\Data;use Spatie\LaravelData\Mappers\SnakeCaseMapper;
#[MapName(SnakeCaseMapper::class)]class JobPayloadData extends Data{ public function __construct( public string $title, public JobStatus $status, /** @var array{int, int} */ public array $salaryRange, ) { }}
use App\Enums\JobStatus;use Spatie\LaravelData\Attributes\MapName;use Spatie\LaravelData\Data;use Spatie\LaravelData\Lazy;use Spatie\LaravelData\Mappers\SnakeCaseMapper;
#[MapName(SnakeCaseMapper::class)]class JobData extends Data{ public function __construct( public int $id, public string $title, public JobStatus $status, /** @var array{int, int} */ public array $salaryRange, public Lazy|CompanyData $company, /** @var array{applications: int, rejections: int, approved: int} */ public Lazy|array $statistics, ) { }}
use App\Data\CompanyData;use App\Http\Controllers\Controller;use App\Models\Company;use Illuminate\Http\Request;use Spatie\LaravelData\PaginatedDataCollection;use Spatie\QueryBuilder\QueryBuilder;
class CompaniesController extends Controller{ public function index(Request $request) { $companies = QueryBuilder::for(Company::class) ->allowedFields(['id', 'name', 'jobs.id', 'jobs.title', 'created_at']) ->allowedFilters([ 'name', 'created_at', ]) ->allowedIncludes('jobs') ->allowedSorts([ 'name', 'created_at', ]) ->paginate($request->integer('per_page', 15));
return CompanyData::collect($companies, PaginatedDataCollection::class); }}
Scramble PRO has helped us build clear API documentation during the creation of our mobile app.
Support for Spatie's Laravel Data package makes Scramble PRO a must-have for developers that want to build strongly-typed API objects.
As early adopters, Roman was always quick to respond and ask for feedback.
Highly recommended!
Scramble PRO is amazing. It helps us move quickly and have a public API from day one! We finally have consistent typing between backend and the frontend.