Web Development · WDC-01-35

Laravel Intermediate

Laravel Intermediate is a mid-level course that follows Laravel Basic, covering Eloquent and data relationships, collections, fixing N+1 queries, forms with Blade components, email, events, queues, Artisan commands, task scheduling and testing with Pest, as preparation for Laravel Advanced. It suits web developers and in-house IT teams who have completed Laravel Basic or can already build a Laravel CRUD application.

Updated
From 6,210 THB / person 6,900 −10% excl. VAT 7% · group rates available
PDFDownload the course outline
  • Duration18 hours · 3 days
  • FormatOnsite / live online
  • Next roundOn request
  • CertificateIncluded

Course overview

Once you can build websites with Laravel, real projects soon need more than CRUD pages: more complex data relationships, reports, search, email, background work that runs through a queue, scheduled tasks, and tests that let you change code with confidence. Laravel 13 on PHP 8.5 has the tools for all of this; the skill lies in knowing which to choose and how to use them properly.

This intermediate course follows Basic Laravel for Beginners and prepares you for Laravel Advanced. It covers intermediate Eloquent, many-to-many relationships, observers and model events, collections, factories and seeders, fixing N+1 queries, forms with Blade components, search and pagination, email and notifications, events, listeners, jobs and queues, Artisan commands, task scheduling, file handling, membership features and testing with Pest, finishing with an activity feed workshop. (3 days, 6 hours per day, 18 hours in total, Intermediate level.)

What you’ll gain

  • Set up a Laravel 13 project and use Tinker and Laravel Pail in daily work
  • Use intermediate Eloquent, many-to-many relationships, scopes and model events
  • Use collections, factories and seeders, and fix N+1 queries
  • Build forms with Blade components and validation, and add search and pagination
  • Send email and notifications, and move background work into events, jobs and queues
  • Create Artisan commands and schedule tasks with the scheduler
  • Handle files, images, membership features and intermediate user permissions
  • Write feature tests with Pest using fakes for mail, queues and storage

Who this course is for

  • Web developers who have completed Laravel Basic or can already build websites with Laravel
  • Programmers and IT teams who maintain their organisation's Laravel systems
  • People who used older Laravel versions and want to update to Laravel 13
  • Anyone who wants a solid base before taking Laravel Advanced

Prerequisites

  • Completion of Basic Laravel for Beginners, or able to build a CRUD application with Laravel
  • Able to write PHP, with a basic understanding of object-oriented PHP
  • Basic use of Composer, the command line and Git
  • A Windows, macOS or Linux laptop with rights to install software

Curriculum

Course Details

This course is the 2026 edition of Laravel Intermediate, which originally taught Laravel 5. It has been rewritten for Laravel 13 on PHP 8.5. It runs for 3 days, 6 hours per day (18 hours in total, 09:00-16:00), as lectures with labs. Intermediate level. Day one covers intermediate Eloquent, many-to-many relationships, observers, collections, factories, seeders and query performance. Day two covers forms with Blade components, search and pagination, email and notifications, events, listeners and queues, Artisan commands and task scheduling. Day three covers files and images, membership and permissions, testing with Pest and splitting class responsibilities, finishing with an activity feed workshop. The course sits between Basic Laravel for Beginners and Laravel Advanced. All tools are open source or have a free option.

Day 1 Intermediate Eloquent and Data

Section 1: Lab: A Laravel 13 Project and Everyday Tools

  • What is new in Laravel 13 and what changed from older Laravel versions
  • Environment, configuration and storing secrets
  • Try code interactively with Tinker
  • Follow logs in real time with Laravel Pail and track errors
  • Lab: set up the project used throughout the course

Section 2: Lab: Intermediate Eloquent

  • Mass assignment and protecting it with fillable
  • Local scopes and global scopes
  • Attribute casting, accessors and dates with Carbon
  • More complex queries with whereHas, withCount and subqueries
  • Lab: filter data by status and date range with scopes

Section 3: Lab: Many to Many, Observers and Model Events

  • Many-to-many relationships and extra data on the pivot table
  • Foreign key constraints and deleting related data
  • Model events and observers
  • Choosing between an observer and an event
  • Lab: projects and members with roles stored on the pivot table

Section 4: Lab: Collections and Reports

  • Common collection methods: map, filter, groupBy and sum
  • Lazy collections for large data sets
  • Summarising in the query versus in a collection
  • Charts from summary data with Chart.js
  • Lab: a monthly summary report page with charts

Section 5: Factories, Seeders and Query Performance

  • Test data with model factories and states
  • Seeders for a system's starting data
  • The N+1 query problem and eager loading
  • Turn on preventLazyLoading in development and write efficient queries
  • Lab: count queries before and after tuning a list page
Day 2 Forms, Email and Background Work

Section 6: Lab: Forms with Blade Components and Validation

  • Build reusable inputs and forms with Blade components
  • Form requests and intermediate validation rules
  • Validate field by field as users type with Laravel Precognition and Alpine.js
  • View composers for data shared by every page
  • Lab: a multi-step project creation form with validation

Section 7: Lab: Search, Sorting and Pagination

  • Basic search across several columns
  • Sort and filter through the query string
  • Standard, simple and cursor pagination
  • Keep search values when changing pages
  • Lab: a list page with search, filters and pagination

Section 8: Lab: Email and Notifications

  • Create mailables and Markdown emails
  • Configure the mail transport and catch emails in development with Mailpit
  • Notifications by email and database
  • Attach files and style emails to match the brand
  • Lab: notify members when they are added to a project

Section 9: Lab: Events, Listeners and Queues

  • Event-driven code with events and listeners
  • Move slow work into jobs and push them onto the queue
  • The database queue and running a queue worker
  • Failed jobs, retries and attribute settings such as #[Tries]
  • Lab: send email and build a report file through the queue

Section 10: Lab: Artisan Commands and Task Scheduling

  • Why Composer matters, and how autoloading is structured
  • Create Artisan commands with arguments, options and prompts
  • Schedule tasks with the scheduler and set up cron on the server
  • Send summary emails automatically on a schedule
  • Lab: commands that clean old data and send a daily report on their own
Day 3 Files, Membership, Testing and Workshop

Section 11: Lab: Files and Images

  • Local and public storage disks, and an overview of cloud storage
  • Upload several files and check their type and size
  • Resize images and create thumbnails with an image library
  • Download files through signed URLs
  • Lab: attach files and images to projects

Section 12: Intermediate Membership and Permissions

  • Extend the starter kit: email verification and password reset
  • guest and intended redirects
  • Policies for permissions by data owner and role
  • Wildcard subdomain routes to separate each organisation's space
  • CSRF protection and logging important HTTP requests

Section 13: Lab: Testing with Pest

  • Feature tests with an in-memory SQLite database
  • Feature tests for authentication and permissions
  • Mail::fake(), Queue::fake() and Storage::fake()
  • Regression tests when fixing bugs
  • Lab: a test suite for projects and notifications

Section 14: Interfaces and SRP in Laravel Code

  • The single responsibility principle and dividing class responsibilities
  • When to use an interface and bind it in the service container
  • The Adapter pattern for swapping external services
  • Test code that uses facades with fakes and mocks
  • Lab: separate an external exchange-rate service with an interface and an adapter

Section 15: Workshop: An Activity Feed

  • The activity feed concept and table design with a polymorphic relationship
  • Record activity automatically with model events
  • Workshop: a project activity feed page with pagination and tests
  • Build with Vite and an overview of running server tasks with Laravel Envoy
  • Present the result and next steps towards Laravel Advanced

Schedule & training options

For individuals — public rounds

No public rounds are open right now. Join the waiting list and we will contact you first when the next round opens, or ask us on LINE. Or call 02-570-8449 or 088-807-9770

For organisations — in-house / private

  • Tailor the content to your team’s tools and projects
  • Your dates, at your office or live online
  • Quotation with tax ID for procurement
Corporate training quote

Instructors

Frequently asked questions

What is the N+1 query problem, and how do you fix it in Laravel?

The N+1 problem happens when you load a list once and then, inside a loop, fetch related data row by row, so the database runs N extra queries and the page slows down as the data grows. In Laravel you fix it with eager loading through with(), for example Post::with('comments')->get(), which fetches the related records in one extra query. Calling Model::preventLazyLoading() during development makes Laravel flag the problem for you.

What are Laravel queues for, and how do you set them up?

Queues move slow work, such as sending email, processing images or calling external APIs, into the background so users do not wait for it to finish. Create a job class with php artisan make:job, put the work in its handle method and push it onto the queue with dispatch(); in Laravel 13 you can set retries with attributes such as #[Tries]. Then choose a queue connection in the .env file, the database driver in this course, and run php artisan queue:work to start a worker that processes the jobs.

How do events and listeners work in Laravel?

An event announces that something has happened in the system, such as a user registering, and a listener is a class that reacts to it, for example by sending a welcome email or writing a log entry. The code that fires the event does not need to know what follows, so you can add or remove behaviour without touching it. Slow listeners can also be set to run through the queue.

Who is the Laravel Intermediate course for, and what should I know beforehand?

It suits web developers who have completed Laravel Basic or can already build websites with Laravel, programmers and IT teams who maintain their organisation's Laravel systems, and people moving from older Laravel versions to Laravel 13. You should be able to build a CRUD application in Laravel, understand basic object-oriented PHP and use Composer and the command line. The course is also good preparation for Laravel Advanced.

What will I be able to do after the Laravel Intermediate course?

You will be able to design many-to-many relationships, use scopes, observers and collections for reports, fix N+1 queries, build reusable forms with Blade components, add search and pagination, send email and notifications, move heavy work into jobs and queues, create Artisan commands and schedule tasks, handle files and user permissions, and write feature tests with Pest. Participants who complete the training receive a Certificate of Completion with its own number, which can be verified online.

Can the Laravel Intermediate course be run in-house for our team?

Yes. It can be run in-house for your team, with examples adapted to your own work, such as building queues or reports from the system your team is developing, or a focus on updating code from older Laravel versions to Laravel 13. You can request a quotation from this page, or contact us on LINE @itgenius or by phone on 02-570-8449.

Related articles

Articles are published in Thai.