gsferro/powermodel

优雅且高效地格式化日期、时间等字段,只需在原始属性名后添加一个后缀,无需在模型内声明访问器(Accessors)和/或修改器(Mutators)

v1.5.0 2024-08-06 14:57 UTC

This package is auto-updated.

Last update: 2024-09-06 15:12:38 UTC


README

powermodel

Latest Version Total Downloads License

优雅且高效地格式化日期、时间等字段,只需在原始属性名后添加一个后缀,无需在模型内声明访问器(Accessors)和/或修改器(Mutators)。也可以通过关系轻松显示总和,无需声明访问器,如高级用法中所示

安装

composer require gsferro/powermodel
  • 如果由于您的 PHP 版本(<8.0.0)出现任何问题,请执行

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

配置模型

  1. 在模型中添加包的 trait
    Use PowerModel;

使用方法

# Para fins de demonstração
$model = Model::first();
  1. 日期

    • 巴西数据库格式
    # 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_fmr // sufixo '_fmr' => 12:00
    $model->created_at_rar // sufixo '_rar' => 12:00:00
  2. CPF | CNPJ: _inc

    • 检查值是否为 CPF 或 CNPJ,并按相应格式添加掩码
     # 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. 货币值: _mbr (float)

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

    # original
    $model->valor_numerico // 1234567
    # sufixo
    $model->valor_numerico_nbr // sufixo '_nbr' =>  1.234.567
  5. 加密电子邮件: _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. 启用/禁用: _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. 是/否: _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. 启用/禁用 (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"

高级用法

  • 总和: <relationName>_sum_<column_name>

        # 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
    • 或者您可以这样做
        # 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
  • 计数: <relationName>_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
    • 或者您可以这样做
        # 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

追加

如果希望在调用模型时直接显示访问器,只需在追加中添加即可

  1. 无追加
 # 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. 在模型中带有追加
 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. 使用关系前缀追加,无需创建访问器
    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