Criteria com relacionamento

Galera, estou com dificuldade em criar uma consulta pelo criteria, quero que no Search apareçam só os campos relacionados ao ID de um usuário,ou seja, alguém sabe como faço para criar esta query pelo Criteria do Search default que o Yii geral na model?

Query:




SELECT a.* from associacao as a, maternidadeassociacao as ma where a.idassociacao = ma.idassociacao and ma.idmaternidade = $idmaternidade



Breno,

São usuários autenticados?

Se for, e se você usa o authenticate() do UserIdentify faz assim:


    public function authenticate() {


        $db = Yii::app()->db;

        $usuario = strtolower($this->username);

        $usuario = Usuario::model()->find(

                array(

                    'condition' => "LOWER(usuario) = '{$usuario}' AND liberar = '1'"

                    )

                );


        if($usuario === null){

            $this->errorCode=self::ERROR_USERNAME_INVALID;

        } else if(!$usuario->validatePassword($this->password)){

            $this->errorCode=self::ERROR_PASSWORD_INVALID;

        } else {

        [indent][indent][b]foreach($usuario as $key => $value){


            $this->setState($key, $usuario->$key);


        }[/b][/indent][/indent]

            $this->codusuario = $usuario->codusuario;

            $this->username = $usuario->usuario;

            $this->errorCode=self::ERROR_NONE;


        }

        return $this->errorCode==self::ERROR_NONE;

    }

Deixei separado para você visualizar o que eu fiz!

Tu atribui os dados ao Yii::app()->user.

Ai no seu model, lá na função search(), você coloca uma $criteria->addCondition(‘idmaternidade = :idmaternidade ‘, ‘params’ => array(’:idmaternidade’ => Yii::app()->user->idmaternidade))

Hum, tipo que o controle de permissões já esta pronto, o que não consigo na verdade é adaptar a função Search() que tem dentro de meu Model.

Eu estou recebendo por paramentro nesta função o atributo $idmaternidade, pq quando chamo ele tenho que pesquisar todos os valores desta maternidade.

Por exemplo:

Tabela associação (É o model que estou precisando alterar o Search()) tenho:

idassociacao

associacao

descricao

Tabela maternidade tenho:

idmaternidade

maternidade

Tabela maternidadeassociacao tenho:

idmaternidadeassociacao

idassociacao

idmaternidade

No model da Tabela associação quero que o search retorne apenas valores onde a query abaixo é satisfeita:

SELECT a.* from associacao as a, maternidadeassociacao as ma where a.idassociacao = ma.idassociacao and ma.idmaternidade = $idmaternidade

onde $idmaternidade é um valor int.

Entendeu? Eu já tentei fazer assim:




        public function search($idmaternidade)

	{

                //$sql = "SELECT a.* from associacao as a, maternidadeassociacao as ma where a.idassociacao = ma.idassociacao and ma.idmaternidade = $idmaternidade";

                //$associacoes_list=Associacao::model()->findAllBySql($sql);


		$criteria=new CDbCriteria;

		$criteria->compare('idassociacao',$this->idassociacao);

		$criteria->compare('idcategoria',$this->idcategoria);

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

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

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

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

                $criteria->condition = "idassociacao IN SELECT a.idassociacao from associacao as a, maternidadeassociacao as ma where a.idassociacao = ma.idassociacao and ma.idmaternidade = $idmaternidade";


		return new CActiveDataProvider(get_class($this), array(

			'criteria'=>$criteria,

		));

	}



Mas não tive sucesso.