Beforevalidate Relacional

Olá amigos,

Eu tenho uma as tabelas cliente, pessoa_fisica e pessoa_juridica (cada uma dessas duas últimas possuem um fk_cliente). Gostaria de saber como desabilitar no model a validação da pessoa_fisica caso o cliente selecione jurídica como tipo_pessoa em cliente e vice-versa. Eu pensei em fazer com um beforeValidate, mas não estou sabendo como fazer…

Alguém pode me ajudar?

Obrigado desde já e abraços!!!

Marnei,

Você vai precisar tirar a validação da pessoa_fisica e pessoa_juridica do rules().

Em beforeValidate(), você vai precisar fazer uma condição, dependendo da informação que o Model receber do tipo_pessoa.

Por exemplo:


public function beforeValidate() {

	if ($this->tipo_pessoa == 'F' && empty($this->cpf)) {

		$this->addError('cpf', 'CPF é obrigatório.');

	} else if ($this->tipo_pessoa == 'J' && empty($this->cnpj)) {

		$this->addError('cnpj', 'CNPJ é obrigatório.');

	}


	return parent::beforeValidate();

}

Como não sei quais os campos do seu formulário, postei um exemplo de validação para o tipo de pessoa.

Olá Newerton, mais uma vez obrigado pela ajuda… mas vou precisar de uma ajudinha pra colocar em prática o que você aconselhou, pois eu tentei fazer e não deu certo…

model Cliente:




<?php


class Cliente extends CActiveRecord

{


	public function rules()

	{

		return array(

			array('nome, sobrenome, email, senha, tipo_pessoa, cep, endereco, numero, bairro, cidade, estado, como_conheceu', 'required', 'message'=>'O campo {attribute} é obrigatório!'),

			array('tipo_pessoa', 'length', 'max'=>1),

		);

	}


	public function relations()

	{

		return array(

			'pessoaFisicas' => array(self::HAS_MANY, 'PessoaFisica', 'fk_cliente'),

			'pessoaJuridicas' => array(self::HAS_MANY, 'PessoaJuridica', 'fk_cliente'),

		);

	}


}



model PessoaFisica:




<?php


class PessoaFisica extends CActiveRecord

{


	public function rules()

	{

		return array(

			array('sexo, cpf, data_nascimento, telefone_residencial', 'required', 'message'=>'O campo {attribute} é obrigatório!'),

		);

	}


	public function relations()

	{

		return array(

			'fkCliente' => array(self::BELONGS_TO, 'Cliente', 'fk_cliente'),

		);

	}


}



model PessoaJuridica:




<?php


class PessoaJuridica extends CActiveRecord

{


	public function rules()

	{

		return array(

			array('razao_social, cnpj, telefone_comercial', 'required', 'message'=>'O campo {attribute} é obrigatório!'),

		);

	}


	public function relations()

	{

		return array(

			'fkCliente' => array(self::BELONGS_TO, 'Cliente', 'fk_cliente'),

		);

	}


}



Deixei apenas o essencial de cada model para não ficar muito grande ok? Se puder me dar mais esse help eu agradeço.

Abraços!!!

Marnei,

Posta o seu formulário inteiro que tem o campo de tipo pessoa, cpf e cnpj.