Pular para o conteúdo principal

← Visão geral · Voltar ao README · Trabalhando com configurações →

Primeiros passos

Requisitos​

  • PHP 8.3 ou mais recente.
  • Laravel 12 ou 13.

Instalar o pacote​

composer require dragon-code/laravel-model-settings

O Laravel detecta automaticamente o service provider do pacote.

Publique a configuração e a migration, depois crie a tabela de configurações:

php artisan vendor:publish --tag="model_settings"
php artisan migrate

A tag model_settings publica config/model_settings.php e a migration do pacote. Por padrão, a migration cria uma tabela settings na conexão padrão da aplicação com o banco de dados.

Adicionar a trait​

Adicione HasSettings a cada modelo Eloquent que precise de configurações:

namespace App\Models;

use DragonCode\LaravelModelSettings\Concerns\HasSettings;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
use HasSettings;
}

A trait adiciona os seguintes métodos públicos:

MembroUso
settings()Ler ou alterar as configurações efetivas de um modelo persistido
defaultSettings()Ler ou alterar os valores padrão da classe do modelo
modelSettings()Relação Eloquent usada para carregamento antecipado

Armazenar a primeira configuração​

Crie um valor padrão para todos os modelos User persistidos:

(new User)->defaultSettings()->set('timezone', 'UTC');

Sobrescreva esse valor para um usuário persistido:

$user = User::query()->firstOrFail();

$user->settings()->set('timezone', 'Europe/Paris');

assert($user->settings()->get('timezone') === 'Europe/Paris');

Leia todas as configurações efetivas como uma coleção indexada pelo nome da configuração:

$settings = $user->settings()->all();

assert($settings->get('timezone') === 'Europe/Paris');

Remova a sobrescrita para voltar a usar UTC:

$user->settings()->forget('timezone');

assert($user->settings()->get('timezone') === 'UTC');

Persista os modelos primeiro​

Use settings()->set(), setMany(), forget(), forgetMany() e purge() somente depois que o modelo pai for persistido. Para um modelo não persistido, settings()->get() retorna null, settings()->has() retorna false e settings()->all() retorna uma coleção vazia mesmo quando a classe tem valores padrão. Cada método de alteração lança DragonCode\LaravelModelSettings\Exceptions\InvalidSettingsOwnerException antes de uma consulta ao armazenamento.

Veja também​