PHPackages                             gsferro/powermodel - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. gsferro/powermodel

ActiveLibrary[Database &amp; ORM](/categories/database)

gsferro/powermodel
==================

Forma elegante e eficiente de formatar campos de data, hora e afins ao exibir, colocando somente um sufixo no nome original do atributo sem precisar declarar Accessors e/ou Mutators dentro da model

v1.6.0(1y ago)4826↓50%11MITPHP

Since Dec 23Pushed 1y ago1 watchersCompare

[ Source](https://github.com/gsferro/laravel-powermodel)[ Packagist](https://packagist.org/packages/gsferro/powermodel)[ RSS](/packages/gsferro-powermodel/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (3)DependenciesVersions (8)Used By (1)

 [![powermodel](logo.png)](logo.png)

 [![Latest Version](https://camo.githubusercontent.com/ca80c267c69f21668daa0304cebffccf50d1374362f2adbc2737ce2d48eae529/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6773666572726f2f706f7765726d6f64656c)](https://packagist.org/packages/gsferro/powermodel) [![Total Downloads](https://camo.githubusercontent.com/06a580aa32c971445201f0ee5491c0d1647bb97179f197081493e5edf9a20c8d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6773666572726f2f706f7765726d6f64656c)](https://packagist.org/packages/gsferro/powermodel) [![License](https://camo.githubusercontent.com/c89e9015076d67d86af07b546bba6ee5e3b55393e6caa3ed91d8cbc557220e04/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6773666572726f2f706f7765726d6f64656c)](https://packagist.org/packages/gsferro/powermodel)

---

Forma elegante e eficiente de formatar campos de data, hora e afins, colocando somente um sufixo no nome original do atributo sem precisar declarar Accessors e/ou Mutators dentro da model. Pode facilmente também exibir um somatório usando relacionamento, sem precisar declarar o Accessor, como visto no [Uso avançado](#uso-avanado)

### Instalação

[](#instalação)

```
composer require gsferro/powermodel
```

- Caso de algum Problema por conta da sua versão do php (&lt;8.0.0), execute:

    ```
    composer require gsferro/powermodel --ignore-platform-reqs
    ```

### Configurar Model

[](#configurar-model)

1. Na Model adicione a trait do pacote: ```
    Use PowerModel;
    ```

### Uso

[](#uso)

```
# Para fins de demonstração
$model = Model::first();

```

1. Datas:

    - formato de banco para BR

    ```
    # original
    $model->created_at // 2021-12-16 12:00:00
    # sufixo
    $model->created_at_fdh // sufixo '_fdh' => 16/12/2021 12:00:00
    $model->created_at_dhi // sufixo '_dhi' => 16/12/2021 12:00
    $model->created_at_fmt // sufixo '_fmt' => 16/12/2021
    $model->created_at_fmy // sufixo '_fmy' => 16/12/21
    $model->created_at_fmr // sufixo '_fmr' => 12:00
    $model->created_at_rar // sufixo '_rar' => 12:00:00
    ```
2. CPF | CNPJ: `_inc`

    - Verifica se o valor é um cpf ou cnpj e coloca a mascara de acordo

    ```
     # original
     $model->cpf // 12345678900
     # sufixo
     $model->cpf_inc // sufixo '_inc' => 123.456.789-00

     # original
     $model->cnpj // 12345678901234
     # sufixo
     $model->cnpj_inc // sufixo '_inc' => 12.345.678/9012-34

     # original
     $model->cpf_cnpj // 12345678900 | 12345678901234
     # sufixo
     $model->cpf_cnpj_inc // sufixo '_inc' => 123.456.789-00 | 12.345.678/9012-34
    ```
3. Valor Monetário: `_mbr` (float)

    ```
    # original
    $model->valor_unitario // 12345.67
    # sufixo
    $model->valor_unitario_mbr // sufixo '_mbr' =>  12.345,67
    ```
4. Valor Numerico: `_nbr` (int)

    ```
    # original
    $model->valor_numerico // 1234567
    # sufixo
    $model->valor_numerico_nbr // sufixo '_nbr' =>  1.234.567
    ```
5. Email Mascarado: `_msk`

    ```
    # TODO pegar a configuração da mascara do e-mail via config

    # original
    $model->email // "fulano@exemplo.com"
    # sufixo
    $model->email_msk // sufixo '_msk' =>  "f*****o@exemplo.com"

    # Caso o campo não seja um email valido, devolvera o valor original:
    $model->email // "fulano#exemplo.com"
    # sufixo
    $model->email_msk // sufixo '_msk' =>  "fulano#exemplo.com"
    ```
6. Ativo / Inativo: `_sai` - (bool)

    ```
    # original
    $model->status // "1"
    # sufixo
    $model->status_sai // sufixo '_sai' =>  "Ativo"

    # original
    $model->status // "0"
    # sufixo
    $model->status_sai // sufixo '_sai' =>  "inativo"
    ```
7. Sim / Não: `_ssn` - (bool)

    ```
    # original
    $model->status // "1"
    # sufixo
    $model->status_ssn // sufixo `_ssn' =>  "Sim"

    # original
    $model->status // "0"
    # sufixo
    $model->status_ssn // sufixo '_ssn' =>  "Não"
    ```
8. Habilitado / Desabilitado *(enable/disabled)*: `_sed` - (bool)

    ```
    # original
    $model->status // "1"
    # sufixo
    $model->status_sed // sufixo `_sed' =>  "Habilitado"

    # original
    $model->status // "0"
    # sufixo
    $model->status_sed // sufixo '_sed' =>  "Desabilitado"
    ```

### Uso Avançado

[](#uso-avançado)

- Sum: `_sum_`

    ```
        # Para fins de demonstração na Model vc tem um Accessors que faz a soma utilizando um relacionamento
        public function getSumValorTotalEstimadoAttribute(): string
        {
            return $this->itens()->sum('valor_total_estimado') ?? 0.00;
        }

        # Invocando
        $model = Model::first();
        $model->sum_valor_total_estimado; // 123456.89
        $model->sum_valor_total_estimado_mbr; // 1.234.567,89
    ```

    - Ou você pode simplesmente fazer assim:

    ```
        # Para fins de demonstração na Model vc tem um relacionamento chamado itens
        # Invocando
        $model = Model::first();
        $model->itens_sum_valor_total_estimado; // 123456.89
        # e ainda utilizar a formatação com o sufixo
        $model->itens_sum_valor_total_estimado_mbr; // 1.234.567,89
    ```
- Count: `_count_relation`

    ```
        # Para fins de demonstração na Model vc tem um Accessors que faz o count utilizando um relacionamento
        public function getCountItensEstimadoAttribute(): string
        {
            return $this->itens()->count() ?? 0;
        }

        # Invocando
        $model = Model::first();
        $model->itens_count_relation; // 12345689
        $model->itens_count_relation_nbr; // 123.456.789
    ```

    - Ou você pode simplesmente fazer assim:

    ```
        # Para fins de demonstração na Model vc tem um relacionamento chamado itens
        # Invocando
        $model = Model::first();
        $model->itens_count_relation; // 12345689
        # e ainda utilizar a formatação com o sufixo
        $model->count_itens_nbr; // 123.456.789
    ```

### Appends

[](#appends)

Caso queria ao invocar a model, já exibir o Accessor, basta colocado no append:

- Usando o exemplo do [Uso avançado](#uso-avanado)

1. Sem append:

```
 # Tinker
 >>> $model = Model::first()
 => {
     id: "1",
     created_at: "2021-12-10 15:19:20.697",
     updated_at: "2021-12-10 15:19:20.697",
   }
 $model->sum_valor_total_estimado; // 123456.89
 $model->sum_valor_total_estimado_mbr; // 1.234.567,89
```

1. Com append na model:

```
 protected $appends = [
     'sum_valor_total_estimado',
     'sum_valor_total_estimado_mbr',
 ];

 # Tinker
 >>> $model = Model::first()
 => {
     id: "1",
     created_at: "2021-12-10 15:19:20.697",
     updated_at: "2021-12-10 15:19:20.697",
     +sum_valor_total_estimado: "123456.89",
     +sum_valor_total_estimado_mbr: "1.234.567,89",
   }
```

1. Com append usando prefixo de relacionamento, sem precisar criar o Accessor:

```
    protected $appends = [
        'sum_valor_total_estimado',
        'sum_valor_total_estimado_mbr',
        'itens_sum_valor_total_estimado',
        'itens_sum_valor_total_estimado_mbr',
    ];

    # Tinker
    >>> $model = Model::first()
    => {
        id: "1",
        created_at: "2021-12-10 15:19:20.697",
        updated_at: "2021-12-10 15:19:20.697",
        +sum_valor_total_estimado: "123456.89",
        +sum_valor_total_estimado_mbr: "1.234.567,89",
        +itens_sum_valor_total_estimado: "123456.89",
        +itens_sum_valor_total_estimado_mbr: "1.234.567,89",
      }
   ```

### TODO
1. No getAttribute
1. Prefixo para soma campo em um relacionamento
1. IP
1. TelCel
1. Implementar para o setAtribute
1. No caso de empty, devolver um valor padrão que esteja dentro de uma config ao inves de somente ""

### Observações Gerais
1. Na versão do laravel 8.77 foi lançada uma nova abordagem para criar os Accessors e Mutators
1. Fique a vontade para enviar pull-request com mais formatações genéricas para facilitar o uso no dia-a-dia

### License

- MIT License
```

###  Health Score

35

—

LowBetter than 80% of packages

Maintenance41

Moderate activity, may be stable

Popularity23

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~186 days

Recently: every ~279 days

Total

7

Last Release

490d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/9857d9f527903d58285b8afd4c9cc5d4150041a5951ba5b84c399d0e579b0255?d=identicon)[gsferro](/maintainers/gsferro)

---

Top Contributors

[![gsferro](https://avatars.githubusercontent.com/u/12704346?v=4)](https://github.com/gsferro "gsferro (9 commits)")

---

Tags

formatterlaravelmoneycurrencymodeleloquentdatetimephoneformattimedatemobilecarboneasymaskaccessorscpfcnpjmutatorspowerpowermodel

### Embed Badge

![Health badge](/badges/gsferro-powermodel/health.svg)

```
[![Health](https://phpackages.com/badges/gsferro-powermodel/health.svg)](https://phpackages.com/packages/gsferro-powermodel)
```

###  Alternatives

[carbonphp/carbon-doctrine-types

Types to use Carbon in Doctrine

218220.4M8](/packages/carbonphp-carbon-doctrine-types)[jenssegers/date

A date library to help you work with dates in different languages

1.8k11.2M80](/packages/jenssegers-date)[mvdnbrk/laravel-model-expires

A package to assign expiration dates to Eloquent models

16617.4k3](/packages/mvdnbrk-laravel-model-expires)[giordanolima/decimal-mutators

Add a short way to create accessors and mutators for decimal fields

151.0k](/packages/giordanolima-decimal-mutators)[phaza/single-table-inheritance

Single Table Inheritance Trait

1515.8k](/packages/phaza-single-table-inheritance)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
