domingo, 12 de outubro de 2014

Validando unicidade com múltiplos campos no Laravel 4.2

Olá galera,

No post Aplicação com Laravel 4 - Models e Validations são apresentadas alguns tipos de validações, entre elas a unique. Hoje iremos demonstrar como validar a unicidade envolvendo vários campos.

Para exemplificar, vamos utilizar um model de bairro que possui uma chave estrangeira de município. Os campos do nosso model bairro: id, descricao, municipio_id. A idéia que é não tenhamos uma descrição repetida de um bairro dentro do mesmo munícipio.

    protected $table = 'bairros';

    protected $fillable = array('descricao', 'municipio_id');

    public static $rules = array(
      'descricao' => 'required|min:3|max:80|unique:bairros,descricao',
      'municipio_id' => 'required|integer'
    );
  

No código acima estão somente as regras, não há nenhuma novidade. No seguinte iremos escrever a validação.

    public static function validate($data)
    {
      $id = 'NULL';
      $municipio_id = $data['municipio_id'];

      if(Request::getMethod() == 'PUT')
        $id = $data['id'];

      self::$rules['descricao'] .= ", {$id}, id ,municipio_id, {$municipio_id}";
      return Validator::make($data, self::$rules);
    }
  

Na linha 3, é atribuído ao $id o valor NULL que será usado na inclusão.

Na linha 4, é capturado o valor do munícipio submetido pelo formulário.

Nas linha 6 e 7, é checado se o request é do tipo PUT (alteração). Se for é capturado o id do registro submetido.

Na linha 9, são adicionados os parâmetros para o unique.

Bastante simples não é verdade?

Fica aí a dica. Grande abraço

Nenhum comentário:

Postar um comentário