gsferro / powermodel
优雅且高效地格式化日期、时间等字段,只需在原始属性名后添加一个后缀,无需在模型内声明访问器(Accessors)和/或修改器(Mutators)
v1.5.0
2024-08-06 14:57 UTC
README
优雅且高效地格式化日期、时间等字段,只需在原始属性名后添加一个后缀,无需在模型内声明访问器(Accessors)和/或修改器(Mutators)。也可以通过关系轻松显示总和,无需声明访问器,如高级用法中所示
安装
composer require gsferro/powermodel
-
如果由于您的 PHP 版本(<8.0.0)出现任何问题,请执行
composer require gsferro/powermodel --ignore-platform-reqs
配置模型
- 在模型中添加包的 trait
Use PowerModel;
使用方法
# Para fins de demonstração
$model = Model::first();
-
日期
- 巴西数据库格式
# 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
-
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
-
货币值:
_mbr
(float)# original $model->valor_unitario // 12345.67 # sufixo $model->valor_unitario_mbr // sufixo '_mbr' => 12.345,67
-
数值:
_nbr
(int)# original $model->valor_numerico // 1234567 # sufixo $model->valor_numerico_nbr // sufixo '_nbr' => 1.234.567
-
加密电子邮件:
_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"
-
启用/禁用:
_sai
- (bool)# original $model->status // "1" # sufixo $model->status_sai // sufixo '_sai' => "Ativo" # original $model->status // "0" # sufixo $model->status_sai // sufixo '_sai' => "inativo"
-
是/否:
_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"
-
启用/禁用 (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
追加
如果希望在调用模型时直接显示访问器,只需在追加中添加即可
- 使用高级用法的示例
- 无追加
# 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
- 在模型中带有追加
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", }
- 使用关系前缀追加,无需创建访问器
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