Pertanyaan Interview PHP Laravel Developer 2026: Panduan Persiapan Lengkap
Panduan komprehensif untuk mempersiapkan interview PHP Laravel developer tahun 2026. Mencakup pertanyaan teknis Eloquent ORM, Service Container, authentication, queue, dan testing.

Pertanyaan interview PHP Laravel developer menguji pengetahuan framework dan prinsip desain perangkat lunak. Dengan dirilis-nya Laravel 13 pada Maret 2026 yang memperkenalkan AI SDK, PHP Attributes, dan Passkey authentication, interviewer mengharapkan kandidat mendemonstrasikan pemahaman fitur terkini bersama fundamental inti.
Interview Laravel biasanya mencakup lima pilar: relasi Eloquent ORM dan performa, Service Container dan dependency injection, pola authentication dan authorization, penanganan queue dan job, serta strategi testing. Posisi senior menambahkan keputusan arsitektur dan pengetahuan ekosistem package.
Pertanyaan Eloquent ORM dan Database
Eloquent tetap menjadi topik paling sering dibahas dalam interview Laravel. Interviewer menilai apakah kandidat memahami lazy vs eager loading, tipe relasi, dan optimasi query.
P: Apa itu masalah N+1 query dan bagaimana Laravel mengatasinya?
Masalah N+1 terjadi ketika kode mengeksekusi satu query untuk mengambil collection, kemudian N query tambahan untuk memuat data terkait untuk setiap item. Laravel menyediakan eager loading melalui with() untuk mengatasi ini.
// Masalah N+1: 1 query untuk posts + N queries untuk authors
$posts = Post::all();
foreach ($posts as $post) {
echo $post->author->name; // Memicu query per post
}
// Solusi: Eager load dengan with()
$posts = Post::with('author')->get(); // Total 2 queries
foreach ($posts as $post) {
echo $post->author->name; // Tidak ada query tambahan
}Laravel 13 mempertahankan strict mode dalam development, yang melempar exception ketika lazy loading terjadi, membantu menangkap masalah N+1 lebih awal.
P: Jelaskan perbedaan antara hasOne, hasMany, belongsTo, dan belongsToMany.
| Relasi | Lokasi Foreign Key | Contoh |
|---|---|---|
| hasOne | Pada model terkait | User hasOne Profile (profiles.user_id) |
| hasMany | Pada model terkait | User hasMany Posts (posts.user_id) |
| belongsTo | Pada model saat ini | Post belongsTo User (posts.user_id) |
| belongsToMany | Tabel pivot | User belongsToMany Roles (tabel role_user) |
P: Bagaimana menangani soft deletes dan apa implikasinya?
use Illuminate\Database\Eloquent\SoftDeletes;
class Post extends Model
{
use SoftDeletes;
// Record soft-deleted dikecualikan secara default
// Untuk menyertakannya:
// Post::withTrashed()->get();
// Untuk mendapatkan hanya yang dihapus:
// Post::onlyTrashed()->get();
}Soft deletes menambahkan kolom deleted_at. Query secara otomatis mengecualikan record soft-deleted kecuali diminta secara eksplisit. Ini mempengaruhi unique constraints dan memerlukan compound indexes yang menyertakan deleted_at untuk performa optimal.
Service Container dan Dependency Injection
Service Container adalah inti Laravel. Memahami binding, resolution, dan contextual injection membedakan developer junior dari senior.
P: Apa perbedaan antara bind, singleton, dan instance dalam Service Container?
public function register(): void
{
// bind: Instance baru setiap resolve
$this->app->bind(PaymentService::class, function ($app) {
return new PaymentService($app->make(StripeClient::class));
});
// singleton: Instance sama sepanjang request
$this->app->singleton(CartService::class, function ($app) {
return new CartService();
});
// instance: Bind instance yang sudah ada
$analytics = new AnalyticsService('UA-xxxxx');
$this->app->instance(AnalyticsService::class, $analytics);
}P: Bagaimana contextual binding bekerja?
Contextual binding memungkinkan injeksi implementasi berbeda berdasarkan class yang membutuhkan dependency tersebut.
public function register(): void
{
$this->app->when(PhotoController::class)
->needs(Filesystem::class)
->give(function () {
return Storage::disk('photos');
});
$this->app->when(VideoController::class)
->needs(Filesystem::class)
->give(function () {
return Storage::disk('videos');
});
}Pertanyaan Authentication dan Authorization
Laravel 13 memperluas fitur authentication dengan dukungan native passkey. Interview sering mencakup authentication tradisional dan modern.
P: Jelaskan perbedaan antara Gates dan Policies.
Gates adalah closure sederhana yang menentukan apakah user diizinkan melakukan action. Policies mengelompokkan logika authorization di sekitar model tertentu.
use Illuminate\Support\Facades\Gate;
public function boot(): void
{
// Gate: Closure sederhana
Gate::define('edit-settings', function (User $user) {
return $user->isAdmin();
});
}
// app/Policies/PostPolicy.php
class PostPolicy
{
public function update(User $user, Post $post): bool
{
return $user->id === $post->user_id;
}
public function delete(User $user, Post $post): bool
{
return $user->id === $post->user_id || $user->isAdmin();
}
}
// Penggunaan di controller
public function update(Request $request, Post $post)
{
$this->authorize('update', $post);
// Atau: Gate::authorize('edit-settings');
}P: Bagaimana cara mengimplementasikan Passkey authentication di Laravel 13?
use Illuminate\Support\Facades\Route;
Route::middleware('web')->group(function () {
Route::post('/passkey/register', [PasskeyController::class, 'store']);
Route::post('/passkey/authenticate', [PasskeyController::class, 'authenticate']);
});
// app/Http/Controllers/PasskeyController.php
use Illuminate\Support\Facades\Auth;
use Laravel\Passkey\Passkey;
class PasskeyController extends Controller
{
public function store(Request $request)
{
$passkey = Passkey::createFor($request->user());
return response()->json(['passkey' => $passkey]);
}
public function authenticate(Request $request)
{
$user = Passkey::authenticate($request->credential);
Auth::login($user);
return redirect('/dashboard');
}
}Pertanyaan Queue dan Job
Memahami pemrosesan background sangat penting untuk membangun aplikasi scalable.
P: Kapan menggunakan queue dan bagaimana menangani kegagalan job?
Queue harus digunakan untuk operasi time-intensive yang tidak memerlukan respons segera: mengirim email, memproses gambar, memanggil API pihak ketiga.
class ProcessPodcast implements ShouldQueue
{
use Queueable;
public $tries = 3;
public $backoff = [60, 300, 600]; // Exponential backoff
public $timeout = 120;
public function __construct(public Podcast $podcast) {}
public function handle(AudioProcessor $processor): void
{
$processor->process($this->podcast->audio_path);
}
public function failed(\Throwable $exception): void
{
// Kirim notifikasi ke admin
Notification::route('mail', 'admin@example.com')
->notify(new JobFailed($this->podcast, $exception));
}
}
// Dispatching job
ProcessPodcast::dispatch($podcast)
->onQueue('podcasts')
->delay(now()->addMinutes(5));P: Jelaskan job batching dan penggunaannya.
Job batching memungkinkan eksekusi grup job dan melakukan callback ketika seluruh batch selesai.
use Illuminate\Bus\Batch;
use Illuminate\Support\Facades\Bus;
public function import(Request $request)
{
$jobs = collect($request->users)->map(function ($userData) {
return new ImportUser($userData);
});
$batch = Bus::batch($jobs)
->then(function (Batch $batch) {
// Semua job berhasil selesai
Notification::send($batch->createdBy, new ImportCompleted());
})
->catch(function (Batch $batch, \Throwable $e) {
// Kegagalan batch job pertama terdeteksi
Log::error('Batch failed', ['batch_id' => $batch->id]);
})
->finally(function (Batch $batch) {
// Batch selesai dieksekusi
})
->allowFailures()
->dispatch();
return response()->json(['batch_id' => $batch->id]);
}Pertanyaan Testing
Aplikasi Laravel yang teruji dengan baik menunjukkan kematangan teknis. Interviewer mengharapkan keakraban dengan PHPUnit dan Pest.
P: Bagaimana pendekatan testing feature vs unit di Laravel?
Unit tests menguji class individu secara terisolasi. Feature tests menguji seluruh flow request HTTP.
use App\Services\DiscountService;
test('calculates percentage discount correctly', function () {
$service = new DiscountService();
$result = $service->calculate(100, 'SAVE20');
expect($result)->toBe(80.0);
});
// tests/Feature/Api/ProductTest.php
use App\Models\Product;
use App\Models\User;
test('authenticated users can create products', function () {
$user = User::factory()->create();
$response = $this->actingAs($user)
->postJson('/api/products', [
'name' => 'Laravel Course',
'price' => 99.99,
]);
$response->assertStatus(201)
->assertJsonPath('data.name', 'Laravel Course');
$this->assertDatabaseHas('products', [
'name' => 'Laravel Course',
'user_id' => $user->id,
]);
});P: Bagaimana cara mocking external services dalam test?
use App\Services\PaymentGateway;
use Mockery;
test('processes payment successfully', function () {
$mock = Mockery::mock(PaymentGateway::class);
$mock->shouldReceive('charge')
->once()
->with(100, 'tok_visa')
->andReturn(['status' => 'success', 'id' => 'ch_123']);
$this->app->instance(PaymentGateway::class, $mock);
$response = $this->postJson('/api/payments', [
'amount' => 100,
'token' => 'tok_visa',
]);
$response->assertStatus(200)
->assertJsonPath('payment_id', 'ch_123');
});Pertanyaan Laravel 13 dan Fitur Modern
P: Jelaskan fitur AI SDK baru di Laravel 13.
Laravel 13 memperkenalkan abstraksi first-party untuk berinteraksi dengan provider AI.
// app/Services/ContentService.php
use Illuminate\Support\Facades\AI;
class ContentService
{
public function generateSummary(string $content): string
{
$response = AI::chat()
->system('You are a helpful assistant that summarizes content.')
->user("Summarize this: {$content}")
->generate();
return $response->text;
}
public function streamResponse(string $prompt)
{
return AI::chat()
->user($prompt)
->stream();
}
}P: Bagaimana PHP Attributes meningkatkan Laravel 13?
use Illuminate\Routing\Attributes\Get;
use Illuminate\Routing\Attributes\Middleware;
#[Middleware('auth')]
class UserController extends Controller
{
#[Get('/users/{user}')]
public function show(User $user)
{
return view('users.show', compact('user'));
}
#[Get('/users/{user}/edit')]
#[Middleware('can:edit,user')]
public function edit(User $user)
{
return view('users.edit', compact('user'));
}
}Pertanyaan Arsitektur dan Best Practices
Posisi senior sering menyertakan pertanyaan desain sistem.
P: Bagaimana mengstrukturkan aplikasi Laravel besar?
Aplikasi besar mendapat manfaat dari domain-driven organization.
app/
├── Domain/
│ ├── Orders/
│ │ ├── Actions/
│ │ │ └── CreateOrderAction.php
│ │ ├── Models/
│ │ │ └── Order.php
│ │ ├── Events/
│ │ │ └── OrderCreated.php
│ │ └── Services/
│ │ └── OrderService.php
│ └── Users/
│ ├── Actions/
│ ├── Models/
│ └── Services/
├── Http/
│ └── Controllers/
└── Providers/P: Jelaskan implementasi Repository pattern di Laravel.
interface UserRepositoryInterface
{
public function find(int $id): ?User;
public function findByEmail(string $email): ?User;
public function create(array $data): User;
public function paginate(int $perPage = 15): LengthAwarePaginator;
}
// app/Repositories/EloquentUserRepository.php
class EloquentUserRepository implements UserRepositoryInterface
{
public function __construct(private User $model) {}
public function find(int $id): ?User
{
return $this->model->find($id);
}
public function findByEmail(string $email): ?User
{
return $this->model->where('email', $email)->first();
}
public function create(array $data): User
{
return $this->model->create($data);
}
public function paginate(int $perPage = 15): LengthAwarePaginator
{
return $this->model->paginate($perPage);
}
}
// app/Providers/RepositoryServiceProvider.php
public function register(): void
{
$this->app->bind(
UserRepositoryInterface::class,
EloquentUserRepository::class
);
}Siap menguasai wawancara Laravel Anda?
Berlatih dengan simulator interaktif, flashcards, dan tes teknis kami.
Kesimpulan
Interview PHP Laravel developer tahun 2026 menguji pemahaman mendalam tentang fitur framework dan kemampuan membuat keputusan arsitektur yang tepat. Kandidat harus mempersiapkan pertanyaan praktis tentang Eloquent ORM, Service Container, authentication, queue, dan testing. Memahami fitur Laravel 13 seperti AI SDK dan PHP Attributes menunjukkan kesadaran terhadap perkembangan ekosistem. Fokus pada menulis kode yang bersih, testable, dan maintainable, serta kemampuan menjelaskan trade-off dari berbagai pendekatan akan membantu kandidat sukses dalam interview Laravel.
Bisakah kamu menemukan bug di Laravel?
Satu potongan kode nyata, satu bug tersembunyi, satu percobaan per hari. Tanpa akun untuk mencoba.

Ditulis oleh
Anthony Fillion-MailletPendiri SharpSkill
Developer fullstack selama lebih dari 10 tahun. Ia menjalankan SharpSkill dan bertanggung jawab atas semua yang diterbitkan di sini.
Diperbarui 7 September 2026
Tag
Bagikan
Artikel terkait

Laravel 12 di 2026: Fitur Baru, Starter Kit, dan Pertanyaan Interview
Laravel 12 menghadirkan starter kit yang dirancang ulang dengan React 19, Vue 3, Livewire 4, dan WorkOS AuthKit. Panduan lengkap fitur baru, jalur upgrade, dan pertanyaan interview penting untuk 2026.

Pertanyaan Wawancara Laravel dan PHP: 25 Teratas di 2026
25 pertanyaan wawancara Laravel dan PHP yang paling sering ditanyakan. Service Container, Eloquent ORM, middleware, queues, dan deployment produksi dengan jawaban lengkap beserta contoh kode.

Laravel Livewire 3 di Tahun 2026: Membangun Aplikasi Reaktif dan Pertanyaan Interview
Panduan lengkap Laravel Livewire 3 untuk membangun aplikasi reaktif dengan PHP murni. Pelajari komponen, validasi real-time, integrasi Alpine.js, dan persiapan interview teknis.