Simple yet flexible settings for your Laravel models.
Note: I will be updating this plugin in the near future to better match the API of the new cache()
helper method that has been introduced in Laravel 5.3
composer require cklmercer/laravel-model-settings
create_users_table.php
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->json('settings');
$table->rememberToken();
$table->timestamps();
});
User.php
use Cklmercer\ModelSettings\HasSettings;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use HasSettings;
// truncated for brevity..
}
$user = App\User::first();
$user->settings()->all(); // Returns an array of the user's settings.
$user->settings()->get(); // Returns an array of the user's settings.
$user = App\User::first();
$user->settings()->get('some.setting');
$user->settings()->get('some.setting', $defaultValue); // With a default value.
$user->settings('some.setting'); // Quicker access.
$user = App\User::first();
$user->settings()->set('some.setting', 'new value');
$user->settings()->update('some.setting', 'new value');
$user = App\User::first();
$user->settings()->has('some.setting');
$user = App\User::first();
$user->settings()->delete('some.setting');
$user->settings()->forget('some.setting');
If you define $defaultSettings
as an array property on your model, we will use its value as the default settings for
any new models that are created without settings.
User.php
use Cklmercer\ModelSettings\HasSettings;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use HasSettings;
/**
* The model's default settings.
*
* @var array
*/
protected $defaultSettings = [
'homepage' => '/profile'
];
// truncated for brevity..
}
If you define $allowedSettings
as an array property then only settings which match a value within
the $allowedSettings
array will be saved on the model.
User.php
use Cklmercer\ModelSettings\HasSettings;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use HasSettings;
/**
* The model's allowed settings.
*
* @var array
*/
protected $allowedSettings = ['homepage'];
// truncated for brevity..
}
If you prefer to use another name other than settings
, you can do so by defining a $mapSettingsTo
property. This simply maps calls to the method (such as config()
) to the settings()
method.
User.php
use Cklmercer\ModelSettings\HasSettings;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use HasSettings;
/**
* The settings field name.
*
* @var string
*/
protected $mapSettingsTo = 'config';
// truncated for brevity..
}