DEV Community

Cover image for 23+ Laravel Interview Questions (Answered) You Should Know
Alex 👨🏼‍💻FullStack.Cafe for FullStack.Cafe

Posted on • Originally published at fullstack.cafe

23+ Laravel Interview Questions (Answered) You Should Know

Despite what people like to think about PHP, it is still the most dominant server-side language on the web and Laravel is the most popular framework for PHP. According to ZipRecruiter, the average Laravel programmer salary is $83,000 per year in USA. Have a seat and explore the top 20 Laravel interview questions you should know before your next tech interview.

Originally published on FullStack.Cafe - Real Tech Interview Questions And Answers For Devs

Q1: What is the Laravel?

Topic: Laravel
Difficulty: ⭐

Laravel is a free, open-source PHP web framework, created by Taylor Otwell and intended for the development of web applications following the model–view–controller (MVC) architectural pattern.

🔗 Source: codingcompiler.com

Q2: What are some benefits of Laravel over other Php frameworks?

Topic: Laravel
Difficulty: ⭐

  • Setup and customisation process is easy and fast as compared to others.
  • Inbuilt Authentication System
  • Supports multiple file systems
  • Pre-loaded packages like Laravel Socialite, Laravel cashier, Laravel elixir, Passport, Laravel Scout
  • Eloquent ORM (Object Relation Mapping) with PHP active record implementation
  • Built in command line tool “Artisan” for creating a code skeleton ,database structure and build their migration

🔗 Source: mytectra.com

Q3: Explain Migrations in Laravel

Topic: Laravel
Difficulty: ⭐⭐

Laravel Migrations are like version control for the database, allowing a team to easily modify and share the application’s database schema. Migrations are typically paired with Laravel’s schema builder to easily build the application’s database schema.

🔗 Source: laravelinterviewquestions.com

Q4: What is the Facade Pattern used for?

Topic: Laravel
Difficulty: ⭐⭐

Facades provide a static interface to classes that are available in the application's service container. Laravel facades serve as static proxies to underlying classes in the service container, providing the benefit of a terse, expressive syntax while maintaining more testability and flexibility than traditional static methods.

All of Laravel's facades are defined in the Illuminate\Support\Facades namespace.
Consider:

use Illuminate\Support\Facades\Cache;

Route::get('/cache', function () {
    return Cache::get('key');
});
Enter fullscreen mode Exit fullscreen mode

🔗 Source: laravel.com

Q5: What is Service Container?

Topic: Laravel
Difficulty: ⭐⭐

The Laravel service container is a tool for managing class dependencies and performing dependency injection.

🔗 Source: laravel.com

Q6: What is Eloquent Models?

Topic: Laravel
Difficulty: ⭐⭐

The Eloquent ORM included with Laravel provides a beautiful, simple ActiveRecord implementation for working with your database. Each database table has a corresponding Model which is used to interact with that table. Models allow you to query for data in your tables, as well as insert new records into the table.

🔗 Source: laravel.com

Q7: What are Laravel events?

Topic: Laravel
Difficulty: ⭐⭐

Laravel event provides a simple observer pattern implementation, that allow to subscribe and listen for events in the application. An event is an incident or occurrence detected and handled by the program.

Below are some events examples in Laravel:

  • A new user has registered
  • A new comment is posted
  • User login/logout
  • New product is added.

🔗 Source: mytectra.com

Q8: What do you know about query builder in Laravel?

Topic: Laravel
Difficulty: ⭐⭐⭐

Laravel's database query builder provides a convenient, fluent interface to creating and running database queries. It can be used to perform most database operations in your application and works on all supported database systems.

The Laravel query builder uses PDO parameter binding to protect your application against SQL injection attacks. There is no need to clean strings being passed as bindings.

Some QB features:

  • Chunking
  • Aggregates
  • Selects
  • Raw Expressions
  • Joins
  • Unions
  • Where
  • Ordering, Grouping, Limit, & Offset

🔗 Source: laravel.com

Q9: How do you generate migrations?

Topic: Laravel
Difficulty: ⭐⭐⭐

Migrations are like version control for your database, allowing your team to easily modify and share the application's database schema. Migrations are typically paired with Laravel's schema builder to easily build your application's database schema.

To create a migration, use the make:migration Artisan command:

php artisan make:migration create_users_table
Enter fullscreen mode Exit fullscreen mode

The new migration will be placed in your database/migrations directory. Each migration file name contains a timestamp which allows Laravel to determine the order of the migrations.

🔗 Source: laravel.com

Q10: How do you mock a static facade methods?

Topic: Laravel
Difficulty: ⭐⭐⭐

Facades provide a "static" interface to classes that are available in the application's service container. Unlike traditional static method calls, facades may be mocked. We can mock the call to the static facade method by using the shouldReceive method, which will return an instance of a Mockery mock.

// actual code
$value = Cache::get('key');

// testing
Cache::shouldReceive('get')
                    ->once()
                    ->with('key')
                    ->andReturn('value');
Enter fullscreen mode Exit fullscreen mode

🔗 Source: laravel.com

Q11: What is the benefit of eager loading, when do you use it?

Topic: Laravel
Difficulty: ⭐⭐⭐

When accessing Eloquent relationships as properties, the relationship data is "lazy loaded". This means the relationship data is not actually loaded until you first access the property. However, Eloquent can "eager load" relationships at the time you query the parent model.

Eager loading alleviates the N + 1 query problem when we have nested objects (like books -> author). We can use eager loading to reduce this operation to just 2 queries.

🔗 Source: FullStack.Cafe

Q12: How do you do soft deletes?

Topic: Laravel
Difficulty: ⭐⭐⭐

Scopes allow you to easily re-use query logic in your models. To define a scope, simply prefix a model method with scope:

class User extends Model {
    public function scopePopular($query)
    {
        return $query->where('votes', '>', 100);
    }

    public function scopeWomen($query)
    {
        return $query->whereGender('W');
    }
}
Enter fullscreen mode Exit fullscreen mode

Usage:

$users = User::popular()->women()->orderBy('created_at')->get();
Enter fullscreen mode Exit fullscreen mode

Sometimes you may wish to define a scope that accepts parameters. Dynamic scopes accept query parameters:

class User extends Model {
    public function scopeOfType($query, $type)
    {
        return $query->whereType($type);
    }
}
Enter fullscreen mode Exit fullscreen mode

Usage:

$users = User::ofType('member')->get();
Enter fullscreen mode Exit fullscreen mode

🔗 Source: laravel.com

Q13: What are named routes in Laravel?

Topic: Laravel
Difficulty: ⭐⭐⭐

Named routes allow referring to routes when generating redirects or Url’s more comfortably. You can specify named routes by chaining the name method onto the route definition:

Route::get('user/profile', function () {
    //
})->name('profile');
Enter fullscreen mode Exit fullscreen mode

You can specify route names for controller actions:

Route::get('user/profile', 'UserController@showProfile')->name('profile');
Enter fullscreen mode Exit fullscreen mode

Once you have assigned a name to your routes, you may use the route's name when generating URLs or redirects via the global route function:

// Generating URLs...
$url = route('profile');

// Generating Redirects...
return redirect()->route('profile');
Enter fullscreen mode Exit fullscreen mode

🔗 Source: laravelinterviewquestions.com

Q14: What is Closure in Laravel?

Topic: Laravel
Difficulty: ⭐⭐⭐

A Closure is an anonymous function. Closures are often used as callback methods and can be used as a parameter in a function.

function handle(Closure $closure) {
    $closure('Hello World!');
}

handle(function($value){
    echo $value;
});
Enter fullscreen mode Exit fullscreen mode

🔗 Source: stackoverflow.com

Q15: List some Aggregates methods provided by query builder in Laravel ?

Topic: Laravel
Difficulty: ⭐⭐⭐

Aggregate function is a function where the values of multiple rows are grouped together as input on certain criteria to form a single value of more significant meaning or measurements such as a set, a bag or a list.

Below is list of some Aggregates methods provided by Laravel query builder:

  • count()
$products = DB::table(products)->count();
Enter fullscreen mode Exit fullscreen mode
  • max()
    $price = DB::table(orders)->max(price);
Enter fullscreen mode Exit fullscreen mode
  • min()
    $price = DB::table(orders)->min(price);
Enter fullscreen mode Exit fullscreen mode
  • avg()
    *$price = DB::table(orders)->avg(price);
Enter fullscreen mode Exit fullscreen mode
  • sum()
    $price = DB::table(orders)->sum(price);
Enter fullscreen mode Exit fullscreen mode

🔗 Source: laravelinterviewquestions.com

Q16: What is reverse routing in Laravel?

Topic: Laravel
Difficulty: ⭐⭐⭐

In Laravel reverse routing is generating URL’s based on route declarations.Reverse routing makes your application so much more flexible. For example the below route declaration tells Laravel to execute the action “login” in the users controller when the request’s URI is ‘login’.

http://mysite.com/login

Route::get(login, users@login);
Enter fullscreen mode Exit fullscreen mode

Using reverse routing we can create a link to it and pass in any parameters that we have defined. Optional parameters, if not supplied, are removed from the generated link.

{{ HTML::link_to_action('users@login') }}
Enter fullscreen mode Exit fullscreen mode

It will create a link like http://mysite.com/login in view.

🔗 Source: stackoverflow.com

Q17: Let's create Enumerations for PHP. Prove some code examples.

Topic: PHP
Difficulty: ⭐⭐⭐

And what if our code require more validation of enumeration constants and values?


Depending upon use case, I would normally use something simple like the following:

abstract class DaysOfWeek
{
    const Sunday = 0;
    const Monday = 1;
    // etc.
}

$today = DaysOfWeek::Sunday;
Enter fullscreen mode Exit fullscreen mode

Here's an expanded example which may better serve a much wider range of cases:

abstract class BasicEnum {
    private static $constCacheArray = NULL;

    private static function getConstants() {
        if (self::$constCacheArray == NULL) {
            self::$constCacheArray = [];
        }
        $calledClass = get_called_class();
        if (!array_key_exists($calledClass, self::$constCacheArray)) {
            $reflect = new ReflectionClass($calledClass);
            self::$constCacheArray[$calledClass] = $reflect - > getConstants();
        }
        return self::$constCacheArray[$calledClass];
    }

    public static function isValidName($name, $strict = false) {
        $constants = self::getConstants();

        if ($strict) {
            return array_key_exists($name, $constants);
        }

        $keys = array_map('strtolower', array_keys($constants));
        return in_array(strtolower($name), $keys);
    }

    public static function isValidValue($value, $strict = true) {
        $values = array_values(self::getConstants());
        return in_array($value, $values, $strict);
    }
}
Enter fullscreen mode Exit fullscreen mode

And we could use it as:

abstract class DaysOfWeek extends BasicEnum {
    const Sunday = 0;
    const Monday = 1;
    const Tuesday = 2;
    const Wednesday = 3;
    const Thursday = 4;
    const Friday = 5;
    const Saturday = 6;
}

DaysOfWeek::isValidName('Humpday');                  // false
DaysOfWeek::isValidName('Monday');                   // true
DaysOfWeek::isValidName('monday');                   // true
DaysOfWeek::isValidName('monday', $strict = true);   // false
DaysOfWeek::isValidName(0);                          // false

DaysOfWeek::isValidValue(0);                         // true
DaysOfWeek::isValidValue(5);                         // true
DaysOfWeek::isValidValue(7);                         // false
DaysOfWeek::isValidValue('Friday');                  // false
Enter fullscreen mode Exit fullscreen mode

🔗 Source: stackoverflow.com

Q18: What is autoloading classes in PHP?

Topic: PHP
Difficulty: ⭐⭐⭐

With autoloaders, PHP allows the last chance to load the class or interface before it fails with an error.

The spl_autoload_register() function in PHP can register any number of autoloaders, enable classes and interfaces to autoload even if they are undefined.

spl_autoload_register(function ($classname) {
    include  $classname . '.php';
});
$object  = new Class1();
$object2 = new Class2(); 
Enter fullscreen mode Exit fullscreen mode

In the above example we do not need to include Class1.php and Class2.php. The spl_autoload_register() function will automatically load Class1.php and Class2.php.

🔗 Source: github.com/Bootsity

Q19: Does PHP support method overloading?

Topic: PHP
Difficulty: ⭐⭐⭐

Method overloading is the phenomenon of using same method name with different signature. You cannot overload PHP functions. Function signatures are based only on their names and do not include argument lists, so you cannot have two functions with the same name.

You can, however, declare a variadic function that takes in a variable number of arguments. You would use func_num_args() and func_get_arg() to get the arguments passed, and use them normally.

function myFunc() {
    for ($i = 0; $i < func_num_args(); $i++) {
        printf("Argument %d: %s\n", $i, func_get_arg($i));
    }
}

/*
Argument 0: a
Argument 1: 2
Argument 2: 3.5
*/
myFunc('a', 2, 3.5);
Enter fullscreen mode Exit fullscreen mode

🔗 Source: github.com/Bootsity

Q20: Why do we need Traits in Laravel?

Topic: Laravel
Difficulty: ⭐⭐⭐⭐

Traits have been added to PHP for a very simple reason: PHP does not support multiple inheritance. Simply put, a class cannot extends more than on class at a time. This becomes laborious when you need functionality declared in two different classes that are used by other classes as well, and the result is that you would have to repeat code in order to get the job done without tangling yourself up in a mist of cobwebs.

Enter traits. These allow us to declare a type of class that contains methods that can be reused. Better still, their methods can be directly injected into any class you use, and you can use multiple traits in the same class. Let's look at a simple Hello World example.

trait SayHello
{
    private function hello()
    {
        return "Hello ";
    }

    private function world()
    {
        return "World";
    }
}

trait Talk
{
    private function speak()
    {
        echo $this->hello() . $this->world();
    }
}

class HelloWorld
{
    use SayHello;
    use Talk;

    public function __construct()
    {
        $this->speak();
    }
}

$message = new HelloWorld(); // returns "Hello World";
Enter fullscreen mode Exit fullscreen mode

🔗 Source: conetix.com.au

Q21: What is Autoloader in PHP?

Topic: Laravel
Difficulty: ⭐⭐⭐⭐

Autoloaders define ways to automatically include PHP classes in your code without having to use statements like require and include.

  • PSR-4 would allow for simpler folder structures, but would prevent us from knowing the exact path of a class just by looking at the fully qualified name.
  • PSR-0 on the other hand is chaotic on the hard drive, but supports developers who are stuck in the past (the underscore-in-class-name users) and helps us discern the location of a class just by looking at its name.

🔗 Source: sitepoint.com

Q22: What does yield mean in PHP?

Topic: PHP
Difficulty: ⭐⭐⭐⭐

Explain this code and what the yield does:

function a($items) {
    foreach ($items as $item) {
        yield $item + 1;
    }
}
Enter fullscreen mode Exit fullscreen mode

The yield keyword returns data from a generator function. A generator function is effectively a more compact and efficient way to write an Iterator. It allows you to define a function that will calculate and return values while you are looping over it.

So the function in the question is almost the same as this one without:

function b($items) {
    $result = [];
    foreach ($items as $item) {
        $result[] = $item + 1;
    }
    return $result;
}
Enter fullscreen mode Exit fullscreen mode

With only one difference that a() returns a generator andb() just a simple array. You can iterate on both.

The generator version of the function does not allocate a full array and is therefore less memory-demanding. Generators can be used to work around memory limits. Because generators compute their yielded values only on demand, they are useful for representing sequences that would be expensive or impossible to compute at once.

🔗 Source: stackoverflow.com

Q23: What does a $$$ mean in PHP?

Topic: PHP
Difficulty: ⭐⭐⭐⭐⭐

A syntax such as $$variable is called Variable Variable. Let's give the $$$ a try:

$real_variable = 'test';
$name = 'real_variable'; // variable variable for real variable
$name_of_name = 'name'; // variable variable for variable variable

echo $name_of_name . '<br />';
echo $$name_of_name . '<br />';
echo $$$name_of_name . '<br />';
Enter fullscreen mode Exit fullscreen mode

And here's the output :

name
real_variable
test
Enter fullscreen mode Exit fullscreen mode

🔗 Source: guru99.com

Thanks 🙌 for reading and good luck on your interview!
Please share this article with your fellow devs if you like it!
Check more FullStack Interview Questions & Answers on 👉 www.fullstack.cafe

Top comments (16)

Collapse
 
dansilcox profile image
Dan Silcox

Nice overview :)

Highlights a lot of the key features of Laravel (I learnt a lot here!) and also a lot of the flaws of PHP and ways to work around them (e.g. lack of native enums!).

I think it's worth noting that, when optimising for readability rather than "cleverness", generally it's best to avoid things like "variable variables" as they just confuse things and there's normally a way to write the same thing in a less confusing manner :) Just because one can do things like that, doesn't mean one should!

Collapse
 
renorram profile image
Renorram Brandão

I think the "variable variables" thing is more like a trick question I've never seen somebody use this kinda thing and if somebody did I'd assume they are overcomplicating something

Collapse
 
dansilcox profile image
Dan Silcox

Yes exactly - treat it as a code smell.

Collapse
 
bkirev profile image
Bozhidar Kirev

Q12: How do you do soft deletes?

Then goes and explains what are scopes.

Collapse
 
dansilcox profile image
Dan Silcox

Soft delete could be implemented as a scope with a filter like where deleted = false :)

Collapse
 
sambenne profile image
Sam Bennett

Wouldn't you just use the SoftDeletes Trait? It seems pointless to use scopes to do soft deletes. Plus the question says how to do Soft Deletes but does not show anything to do with it. That would be a fail in my books and would show the person can't read.

Thread Thread
 
dansilcox profile image
Dan Silcox

Fair enough - I must admit I don't do Laravel on a daily basis so wasn't aware of the SoftDeletes trait - was just working out from the context of the OP's article that they were implying scopes could be used for soft deletes...

Collapse
 
bkirev profile image
Bozhidar Kirev

I think the author just messed up the copypasta :)

Anyone who is interested in proper explanation, please refer to laravel.com/docs/6.x/eloquent#soft...

Thread Thread
 
dansilcox profile image
Dan Silcox

Ah nice thanks for the link

Collapse
 
zaxwebs profile image
Zack Webster

This is great!
'Q12: How do you do soft deletes?' answers about scopes instead.
A 'paste' mistake, it seems. :)

Collapse
 
jorgeirun profile image
Jorge

Excellent recap! This clarifies a lot of concepts.

Collapse
 
divyamohankashyap profile image
DivyeMohan Kashyap

Amazing Article, I am now aware of few new things in Laravel.
Keep Posting!! :-)

Collapse
 
websitedesignnj profile image
Kenneth Walley

Hey Alex, This is a great overview on Laravel Interview Questions (Answered). Awesome, Thank you so much, Alex, for taking the time to write all this. It’s very helpful for us! Thank you.

Collapse
 
tkmanga profile image
Tkmanga

Amazing article! is really useful!

Collapse
 
bestinterviewquestions123 profile image
Best Interview Question

Hey, there are some solid inquiries. Here are a few additional queries from our list of Best interview question.

Collapse
 
edgardbraz profile image
edgardbraz

Brother, this post is Very useful! Thank you. There were features I actually didn't know yet. I'm gonna try it out right now. ;)