
Store Laravel Settings in a Database
Laravel Settings is a package by Spatie for storing strongly typed application settings in a repository and easily use them throughout your application.
Our newest package, laravel-settings, can be used to strongly type settings in a @laravelphp app.
Package: https://t.co/XbJbZDj0sg
Blog post: https://t.co/opovTL39BxThis is our second package release today! (First one: https://t.co/S2DG8zAucN) pic.twitter.com/k8DKt20THf
— Freek Van der Herten (@freekmurze) November 9, 2020
To help you visualize how you’ll eventually use this package, here’s an example of injecting a settings class in a controller and accessing settings:
class IndexController
{
public function __invoke(GeneralSettings $settings){
return view('index', [
'site_name' => $settings->site_name,
]);
}
}
This package is built around strongly-typed settings classes, so naturally, you’re probably curious what GeneralSettings
looks like in the above example:
use Spatie\LaravelSettings\Settings;
class GeneralSettings extends Settings
{
public string $site_name;
public bool $site_active;
public static function group(): string
{
return 'general';
}
}
You’ll likely want to provide a way for admins to update settings, and you can do so by simply setting properties on the class and calling save:
$settings->site_name = $request->input('site_name');
$settings->site_active = $request->boolean('site_active');
$settings->save();
You can even use casts, such as the DateTimeInterfaceCast
that ships with this package. The DateTimeInterfaceCast
can be used for properties that are DateTime
, Carbon
, etc. types.
Repositories
The Laravel Settings package persists data using either a database (i.e., MySQL, PostgresSQL) or Redis. You can also create a custom repository type if you need to support something besides the provided repositories.
You can support multiple database repositories in one application by configuring more than one repository in the package’s settings. You can also mix and match between Redis and database repositories and define which repository a class should use.
Learn More
This package is chalked full of features not mentioned in this post. I encourage you to read through the project’s readme and Store strongly typed settings in a Laravel app on Freek Van der Herten’s blog.
Filed in: NewsNewsletter

Join 31,000+ others and never miss out on new tips, tutorials, and more.
Laravel Jobs

- Full Stack PHP (Mid-Level/Senior) Programmer
-
Remote
PhoneBurner - Software Developer
-
Remote, (US & Canada Only)
Patient Prism - Web Application Developer
-
Chicago Loop
Leading Real Estate Companies of the World - Multiple Laravel Developers (Part-Time)
-
Remote, USA Only
The Great Escape Room - Software Developer
-
Remote (US & Canada)
Alley
Laravel 8.15 Released
The Laravel team released 8.15 with DBAL 3.0 support, and the latest changes in the 8.x branch.
Media Library Pro: Vue, React and Blade components to handle uploads (sponsor)
Media Library Pro is an add-on package for our free Media Library base package. It contains a set of Blade, Vue, and…