Relacionamento Na Função Search()

Pelo o número de meus posts da para perceber que sou novo por aqui :) .

Vamos la!

Estas são minhas tabelas :




create table IF NOT EXISTS cadastro (

    id              int         not null primary key auto_increment,

    descricao       varchar(50) not null

);

create table IF NOT EXISTS situacao (

    id              int         not null primary key auto_increment,

    descricao       varchar(50) not null

);

create table IF NOT EXISTS cadastro_situacao (

    id              int         not null primary key auto_increment,

    cadastro_id     int         not null,

    situacao_id     int         not null,

    foreign key (cadastro_id) references cadastro (id),

    foreign key (situacao_id) references situacao (id)

);

create table IF NOT EXISTS empresa (

    id              int         not null primary key auto_increment,

    razao_social    varchar(100) not null,

    cnpj            varchar(14) not null unique,

    telefone        varchar(14),

    email           varchar(100),

    cadastro_situacao_id int not null,

    foreign key (cadastro_situacao_id) references cadastro_situacao (id)

);



Para cada cadastro tera suas situações, ex: empresa->[ativo, inativo], patrimonio->[em uso, manutençao]

Oque eu quero é na visualizão das empresas na view empresa/admin.php, ao invés de apresentar o id do cadastroSituacao, apresentar a descricao da situacao.

Oque já tentei:




public function search()

{

	$criteria=new CDbCriteria;

		

	$criteria->compare('t.id',$this->id);

	$criteria->compare('razao_social',$this->razao_social,true);

	$criteria->compare('cnpj',$this->cnpj,true);

	$criteria->compare('telefone',$this->telefone,true);

	$criteria->compare('email',$this->email,true);

	//$criteria->compare('cadastro_situacao_id',$this->cadastro_situacao_id);

		

	$criteria->compare('cadastroSituacao.situacao.descricao',$this->cadastroSituacao->situacao->id, true);


	$criteria->with=array('cadastroSituacao');

		

	return new CActiveDataProvider($this, array(

		'criteria'=>$criteria,

	));

}



O erro ocorre nesta linha:




  $criteria->compare('cadastroSituacao.situacao.descricao',$this->cadastroSituacao->situacao->id, true);



O erro:




  Trying to get property of non-object 



Alguem poderia me ajudar?

Ninguem?

Olá. lembrando sempre que for has_many, tem que ser assim:


$empresa->cadastroSituacao->"situacoes"

seria um array de situacoes e não apenas um objeto "situacao".

Poderia postar seus models? Fica mais facil ajudar.

Tradução do Erro

"Trying to get property of non-object" = Tentando pegar uma propriedade de um não-objeto.

Obrigado pela resposta!

Estou postando apenas a parte das relações para não ficar grande…




class Empresa extends CActiveRecord

{

        public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(

			'departamentos' => array(self::HAS_MANY, 'Departamento', 'empresa_id'),

			'cadastroSituacao' => array(self::BELONGS_TO, 'CadastroSituacao', 'cadastro_situacao_id'),

		);

	}

}


class CadastroSituacao extends CActiveRecord

{

	public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(

			'cadastro' => array(self::BELONGS_TO, 'Cadastro', 'cadastro_id'),

			'situacao' => array(self::BELONGS_TO, 'Situacao', 'situacao_id'),

		);

	}

}


class Situacao extends CActiveRecord

{

	public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(

			'cadastroSituacaos' => array(self::HAS_MANY, 'CadastroSituacao', 'situacao_id'),

		);

	}

}

ficaria algo assim?


$criteria->compare('cadastro_situacao_id', $this->cadastroSituacao->situacao[$this->cadastroSituacao->situacao_id]);