Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Método auxiliar

Dúvida: O que eu estou fazendo sei que funciona, mas do ponto de vista das boas práticas, isso está correto? É uma prática comum?

Cenário Tenho uma tabela chamada cadastro, contendo os seguintes campos:

protected $fillable =  ['nome','in_tipo_pessoa'];

O campo in_tipo_pessoa é um integer para não ocupar muito espaço no banco de dados. Como só há três possibilidades: Física, Jurídica e Indefinido. Eu atribuí que 0-física, 1-Jurídica e 2-Indefinido.

Para enviar para a view eu criei no model a seguinte função:

public function in_tipo_pessoa_descricao(){

        switch($this->in_tipo_pessoa){
            case 0:
                return 'Física';
            case 1:
                return 'Jurídica';
            case 2:
                return 'Indefinido';
            default:
                return '#ERRO';
    }
}
2 respostas
solução!

Olá Leandro.

Seu código está bom mas se quiser refatorar mais tenho alguns pontos de sugestão.

  • no campo in_tipo_pessoa que vai ter apenas 3 opcões de 1 dígito você pode definir como tipo char(1) no banco.
  • na função poderia usar um array:
public function in_tipo_pessoa_descricao(){
    $tipos = array(0=>'Física', 1=> 'Jurídica', 2=>'Indefinido'); // lista de tipos

    if(key_exists($this->in_tipo_pessoa, $tipos)){ // testa direto no array se a key existe

        return $tipos[$this->in_tipo_pessoa]; // retorna a descricao do tipo
    }
    return '#ERRO'; // se o tipo não é uma das keys

}

O teste if também pode ser feito assim:

...
    if(in_array($this->in_tipo_pessoa, array_keys($tipos))){ //  testa se o tipo é uma das keys do array de tipos

    }
...

Abraço.

O seu código está bom, mas algo que você poderia fazer também, seria ir no seu model e adicionar um array de quais status você quer e envia-los para view, assim caso precise acrescentar algo futuramente, basta acrescenta-lo ao array

MODEL

const PESSOA_FISICA = 0;
const PESSOA_JURIDICA = 1;
const PESSOA_INDEFINIDA = 2;


const TIPOS_PESSOAS = [
self::PESSOA_FISICA => 'Física',
self::PESSOA_JURIDICA => 'Jurídica',
self::PESSOA_INDEFINIDA = 'Indefinida'
];

Controller

$tiposPessoas = Model::TIPOS_PESSOAS;

return view('arquivo', compact('tiposPessoas'));

BLADE

<select>
    @foreach ($tiposPessoas as  $index => $tipoPessoa)
        <option value="{{$index}}">{{tiposPessoas}}</option>
    @endforeach
</select>

Espero que possa ajuda-lo, abraços!