Back to dictionary

Eloquent Global Scopes

Eloquent Global Scopes is a powerful feature in Laravel, a PHP framework, that allows developers to add constraints to all queries for a given model. Essentially, it's a way to ensure that every query you run for a certain model includes a certain criteria. This can be incredibly useful in a variety of situations, such as when you want to ensure that only active users are retrieved from your database, or when you want to limit results based on a user's permissions.

For instance, let's say you're using Craftable PRO, a Laravel admin panel generator built on the VILT stack (Vue, Inertia, Laravel, Tailwind). You've used it to generate a CRUD (Create, Read, Update, Delete) interface for a 'users' table in your database. However, you want to ensure that only active users are displayed in the admin panel. This is where Eloquent Global Scopes come in. By defining a global scope on the 'User' model, you can ensure that every query you run on the 'users' table will only return active users.

To define a global scope, you would typically define a provider that extends the Illuminate\Database\Eloquent\Scope interface. This interface requires you to implement one method: apply. The apply method may add where constraints to the query as needed.

Eloquent Global Scopes can also be used in conjunction with other features of Laravel and Craftable PRO. For example, if you're using the roles and permissions management feature of Craftable PRO, you could use a global scope to limit the results of a query based on a user's role or permissions. Similarly, if you're using the PHP generator to create new models, you could define a global scope on those models to add default constraints to your queries.

In conclusion, Eloquent Global Scopes are a powerful tool for adding default constraints to your queries in Laravel. Whether you're using a Laravel CRUD generator like Craftable PRO or writing your own queries, they can help you ensure that your application behaves consistently and as expected.