What is the Service Layer pattern in Laravel?
Answer
The Service Layer pattern extracts complex business logic from controllers into dedicated service classes, keeping controllers thin and logic testable. A service class contains methods for domain operations: class UserRegistrationService { public function register(array $data): User { DB::transaction(function() use ($data, &$user) { $user = User::create([...]); $user->profile()->create([...]); event(new UserRegistered($user)); Mail::to($user)->queue(new WelcomeEmail($user)); }); return $user; } }. Inject in controller: public function store(StoreUserRequest $request, UserRegistrationService $service) { $user = $service->register($request->validated()); return redirect()->route("dashboard"); }. Benefits: business logic is reusable across controllers, commands, and queue jobs; logic is unit-testable without HTTP overhead; controllers become thin orchestrators. Laravel's service container automatically injects service dependencies. Combine with repositories for full separation: Controller → Service → Repository → Database.
Previous
What are Eloquent global vs local scopes?
Next
What is the difference between belongsToMany and hasMany in Eloquent?