คำถามสัมภาษณ์ PHP Laravel Developer 2026: คู่มือเตรียมตัวฉบับสมบูรณ์
คู่มือครอบคลุมสำหรับการเตรียมตัวสัมภาษณ์ PHP Laravel developer ปี 2026 ครอบคลุมคำถามเทคนิคเกี่ยวกับ Eloquent ORM, Service Container, authentication, queue และ testing

คำถามสัมภาษณ์ PHP Laravel developer ทดสอบทั้งความรู้เกี่ยวกับ framework และหลักการออกแบบซอฟต์แวร์ ด้วยการเปิดตัว Laravel 13 ในเดือนมีนาคม 2026 ที่นำเสนอ AI SDK, PHP Attributes และ Passkey authentication ผู้สัมภาษณ์คาดหวังให้ผู้สมัครแสดงความเข้าใจในฟีเจอร์ปัจจุบันควบคู่กับพื้นฐานหลัก
การสัมภาษณ์ Laravel มักครอบคลุมห้าเสาหลัก: ความสัมพันธ์ Eloquent ORM และประสิทธิภาพ, Service Container และ dependency injection, รูปแบบ authentication และ authorization, การจัดการ queue และ job, และกลยุทธ์การ testing ตำแหน่งระดับ senior จะเพิ่มเรื่องการตัดสินใจด้านสถาปัตยกรรมและความรู้เกี่ยวกับ ecosystem ของ package
คำถาม Eloquent ORM และ Database
Eloquent ยังคงเป็นหัวข้อที่ถูกพูดถึงมากที่สุดในการสัมภาษณ์ Laravel ผู้สัมภาษณ์ประเมินว่าผู้สมัครเข้าใจ lazy vs eager loading, ประเภทของความสัมพันธ์ และการ optimize query หรือไม่
ถ: ปัญหา N+1 query คืออะไร และ Laravel แก้ไขอย่างไร?
ปัญหา N+1 เกิดขึ้นเมื่อโค้ดรัน query หนึ่งครั้งเพื่อดึง collection จากนั้นรัน N query เพิ่มเติมเพื่อโหลดข้อมูลที่เกี่ยวข้องสำหรับแต่ละ item Laravel มี eager loading ผ่าน with() เพื่อแก้ปัญหานี้
// ปัญหา N+1: 1 query สำหรับ posts + N queries สำหรับ authors
$posts = Post::all();
foreach ($posts as $post) {
echo $post->author->name; // ทริกเกอร์ query ต่อ post
}
// วิธีแก้: Eager load ด้วย with()
$posts = Post::with('author')->get(); // รวม 2 queries
foreach ($posts as $post) {
echo $post->author->name; // ไม่มี query เพิ่มเติม
}Laravel 13 รักษา strict mode ใน development ซึ่งจะ throw exception เมื่อเกิด lazy loading ช่วยให้ตรวจจับปัญหา N+1 ได้เร็ว
ถ: อธิบายความแตกต่างระหว่าง hasOne, hasMany, belongsTo และ belongsToMany
| ความสัมพันธ์ | ตำแหน่ง Foreign Key | ตัวอย่าง |
|---|---|---|
| hasOne | บน model ที่เกี่ยวข้อง | User hasOne Profile (profiles.user_id) |
| hasMany | บน model ที่เกี่ยวข้อง | User hasMany Posts (posts.user_id) |
| belongsTo | บน model ปัจจุบัน | Post belongsTo User (posts.user_id) |
| belongsToMany | ตาราง pivot | User belongsToMany Roles (ตาราง role_user) |
ถ: จัดการ soft deletes อย่างไร และมีผลกระทบอะไรบ้าง?
use Illuminate\Database\Eloquent\SoftDeletes;
class Post extends Model
{
use SoftDeletes;
// record ที่ถูก soft-delete จะถูกยกเว้นโดย default
// เพื่อรวมมัน:
// Post::withTrashed()->get();
// เพื่อดึงเฉพาะที่ถูกลบ:
// Post::onlyTrashed()->get();
}Soft deletes เพิ่มคอลัมน์ deleted_at Query จะยกเว้น record ที่ถูก soft-delete โดยอัตโนมัติ เว้นแต่จะร้องขออย่างชัดเจน สิ่งนี้ส่งผลต่อ unique constraints และต้องการ compound indexes ที่รวม deleted_at เพื่อประสิทธิภาพที่ดีที่สุด
Service Container และ Dependency Injection
Service Container เป็นแกนหลักของ Laravel การเข้าใจ binding, resolution และ contextual injection แยกแยะ developer ระดับ junior จาก senior
ถ: ความแตกต่างระหว่าง bind, singleton และ instance ใน Service Container คืออะไร?
public function register(): void
{
// bind: Instance ใหม่ทุกครั้งที่ resolve
$this->app->bind(PaymentService::class, function ($app) {
return new PaymentService($app->make(StripeClient::class));
});
// singleton: Instance เดียวกันตลอด request
$this->app->singleton(CartService::class, function ($app) {
return new CartService();
});
// instance: Bind instance ที่มีอยู่แล้ว
$analytics = new AnalyticsService('UA-xxxxx');
$this->app->instance(AnalyticsService::class, $analytics);
}ถ: Contextual binding ทำงานอย่างไร?
Contextual binding ช่วยให้ inject implementation ที่แตกต่างกันตาม class ที่ต้องการ dependency นั้น
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');
});
}คำถาม Authentication และ Authorization
Laravel 13 ขยายฟีเจอร์ authentication ด้วยการรองรับ passkey แบบ native การสัมภาษณ์มักครอบคลุมทั้ง authentication แบบดั้งเดิมและสมัยใหม่
ถ: อธิบายความแตกต่างระหว่าง Gates และ Policies
Gates เป็น closure ธรรมดาที่กำหนดว่า user ได้รับอนุญาตให้ทำ action หรือไม่ Policies จัดกลุ่ม logic authorization รอบๆ model เฉพาะ
use Illuminate\Support\Facades\Gate;
public function boot(): void
{
// Gate: Closure ธรรมดา
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();
}
}
// การใช้งานใน controller
public function update(Request $request, Post $post)
{
$this->authorize('update', $post);
// หรือ: Gate::authorize('edit-settings');
}ถ: implement Passkey authentication ใน 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');
}
}คำถาม Queue และ Job
การเข้าใจการประมวลผล background เป็นสิ่งสำคัญสำหรับการสร้างแอปพลิเคชันที่ scalable
ถ: ควรใช้ queue เมื่อใด และจัดการ job ที่ล้มเหลวอย่างไร?
Queue ควรใช้สำหรับ operation ที่ใช้เวลานานซึ่งไม่ต้องการการตอบสนองทันที: ส่งอีเมล, ประมวลผลรูปภาพ, เรียก API ของบุคคลที่สาม
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
{
// ส่งการแจ้งเตือนไปยัง admin
Notification::route('mail', 'admin@example.com')
->notify(new JobFailed($this->podcast, $exception));
}
}
// Dispatch job
ProcessPodcast::dispatch($podcast)
->onQueue('podcasts')
->delay(now()->addMinutes(5));ถ: อธิบาย job batching และกรณีการใช้งาน
Job batching ช่วยให้รัน group ของ job และเรียก callback เมื่อทั้ง batch เสร็จสิ้น
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) {
// Job ทั้งหมดเสร็จสมบูรณ์
Notification::send($batch->createdBy, new ImportCompleted());
})
->catch(function (Batch $batch, \Throwable $e) {
// ตรวจพบ batch job แรกที่ล้มเหลว
Log::error('Batch failed', ['batch_id' => $batch->id]);
})
->finally(function (Batch $batch) {
// Batch รันเสร็จสิ้น
})
->allowFailures()
->dispatch();
return response()->json(['batch_id' => $batch->id]);
}คำถาม Testing
แอปพลิเคชัน Laravel ที่ผ่านการ test อย่างดีแสดงถึงความเป็นผู้ใหญ่ทางเทคนิค ผู้สัมภาษณ์คาดหวังความคุ้นเคยกับ PHPUnit และ Pest
ถ: แนวทาง feature testing เทียบกับ unit testing ใน Laravel เป็นอย่างไร?
Unit tests ทดสอบ class แต่ละตัวแยกกัน Feature tests ทดสอบ flow ของ HTTP request ทั้งหมด
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,
]);
});ถ: mock external services ใน 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');
});คำถาม Laravel 13 และฟีเจอร์สมัยใหม่
ถ: อธิบายฟีเจอร์ AI SDK ใหม่ใน Laravel 13
Laravel 13 นำเสนอ abstraction แบบ first-party สำหรับการโต้ตอบกับ AI provider
// 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();
}
}ถ: PHP Attributes ปรับปรุง 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'));
}
}คำถามสถาปัตยกรรมและ Best Practices
ตำแหน่ง senior มักมีคำถามเกี่ยวกับการออกแบบระบบ
ถ: จัดโครงสร้างแอปพลิเคชัน Laravel ขนาดใหญ่อย่างไร?
แอปพลิเคชันขนาดใหญ่ได้ประโยชน์จากการจัดระเบียบแบบ domain-driven
app/
├── Domain/
│ ├── Orders/
│ │ ├── Actions/
│ │ │ └── CreateOrderAction.php
│ │ ├── Models/
│ │ │ └── Order.php
│ │ ├── Events/
│ │ │ └── OrderCreated.php
│ │ └── Services/
│ │ └── OrderService.php
│ └── Users/
│ ├── Actions/
│ ├── Models/
│ └── Services/
├── Http/
│ └── Controllers/
└── Providers/ถ: อธิบายการ implement Repository pattern ใน 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
);
}พร้อมที่จะพิชิตการสัมภาษณ์ Laravel แล้วหรือยังครับ?
ฝึกฝนด้วยตัวจำลองแบบโต้ตอบ, flashcards และแบบทดสอบเทคนิคครับ
สรุป
การสัมภาษณ์ PHP Laravel developer ปี 2026 ทดสอบความเข้าใจอย่างลึกซึ้งเกี่ยวกับฟีเจอร์ของ framework และความสามารถในการตัดสินใจด้านสถาปัตยกรรมที่ถูกต้อง ผู้สมัครควรเตรียมตัวสำหรับคำถามเชิงปฏิบัติเกี่ยวกับ Eloquent ORM, Service Container, authentication, queue และ testing การเข้าใจฟีเจอร์ Laravel 13 เช่น AI SDK และ PHP Attributes แสดงถึงการตระหนักรู้เกี่ยวกับการพัฒนาของ ecosystem การมุ่งเน้นไปที่การเขียนโค้ดที่สะอาด test ได้ และ maintain ง่าย ตลอดจนความสามารถในการอธิบาย trade-off ของแนวทางต่างๆ จะช่วยให้ผู้สมัครประสบความสำเร็จในการสัมภาษณ์ Laravel
คุณหาบั๊กใน Laravel เจอไหม
โค้ดจริงหนึ่งชิ้น บั๊กที่ซ่อนอยู่หนึ่งจุด วันละหนึ่งครั้ง ลองได้โดยไม่ต้องมีบัญชี

เขียนโดย
Anthony Fillion-Mailletผู้ก่อตั้ง SharpSkill
เป็นนักพัฒนาฟูลสแตกมากว่า 10 ปี ดูแล SharpSkill และรับผิดชอบทุกสิ่งที่เผยแพร่ที่นี่
อัปเดตเมื่อ 7 กันยายน 2569
แท็ก
แชร์
บทความที่เกี่ยวข้อง

Laravel 12 ในปี 2026: ฟีเจอร์ใหม่ Starter Kit และคำถามสัมภาษณ์
Laravel 12 นำ starter kit ที่ออกแบบใหม่มาพร้อม React 19, Vue 3, Livewire 4 และ WorkOS AuthKit คู่มือฉบับสมบูรณ์ครอบคลุมฟีเจอร์ใหม่ เส้นทางการอัปเกรด และคำถามสัมภาษณ์สำคัญสำหรับปี 2026

25 คำถามสัมภาษณ์งาน Laravel และ PHP ยอดนิยมในปี 2026
รวม 25 คำถามสัมภาษณ์งาน Laravel และ PHP ที่พบบ่อยที่สุด ครอบคลุม Service Container, Eloquent ORM, middleware, queues และการ deploy ระบบ production พร้อมคำตอบและตัวอย่างโค้ดครบถ้วน

Laravel Livewire 3 ในปี 2026: สร้างแอปพลิเคชัน Reactive และคำถามสัมภาษณ์งาน
คู่มือฉบับสมบูรณ์สำหรับ Laravel Livewire 3 เพื่อสร้างแอปพลิเคชัน reactive ด้วย PHP ล้วน เรียนรู้เกี่ยวกับ component, validation แบบ real-time, การรวม Alpine.js และเตรียมตัวสำหรับสัมภาษณ์ทางเทคนิค