Usar Criteria Inner Join

Boa tarde a todos,

Estou com a seguinte dificuldade:

Tenho 3 tabelas:

curriculo: com os dados do candidato

adicionar_vaga: que é a vaga adicionada pela empresa.

e candidatos_vaga: que contem as colunas id, id_vaga, id_candidato onde lista os candidatos inscritos a vaga.

o que eu preciso é listar todos os candidatos inscritos então fiz:

model Curriculo




public function relations()

	{

		return array(

                    'candidatos'=>array(self::MANY_MANY, 'AdicionarVaga','candidatos_vaga(id_candidato,id_vaga)')

		);

	}



Controle da vaga




public function actionView($id)

	{

            

              // $inscritos = CandidatosVaga::model()->findall('id_vaga=:id_vaga', array(':id_vaga'=>$id));

            

              // $inscritos=Curriculo::model()->with('candidatos')->findAll('candidatos_candidatos.id_vaga = :id_vaga',array(':id_vaga'=>$id));

               

               $criteria=new CDbCriteria;

               $criteria->with='candidatos';

               $criteria->condition='candidatos_candidatos.id_vaga = :id_vaga';

               $criteria->params = array(':id_vaga'=>$id);

            

            

		$dataProvider=new CActiveDataProvider('Curriculo',array('criteria'=>$criteria));

                $dataProvider->pagination->pageSize=2;

               

            

		$this->render('view',array(

			'model'=>$this->loadModel($id),

                        'dataProvider'=>$dataProvider

		));

	}




porém me retorna o seguinte erro:




CDbCommand falhou ao executar o comando SQL: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'candidatos_candidatos.id_vaga' in 'where clause'. The SQL statement executed was: SELECT `t`.`id` AS `t0_c0`, `t`.`id_cadastro` AS `t0_c1`, `t`.`dp_perfil` AS `t0_c2`, `t`.`dp_esta_empregado` AS `t0_c3`, `t`.`faixa_salarial_id` AS `t0_c4`, `t`.`periodo_desejado_id` AS `t0_c5`, `t`.`contrato_desejado_id` AS `t0_c6`, `t`.`cp_ida_profissional1` AS `t0_c7`, `t`.`cp_ida_profissional2` AS `t0_c8`, `t`.`cp_ida_profissional3` AS `t0_c9`, `t`.`cp_id_departamento1` AS `t0_c10`, `t`.`cp_id_departamento2` AS `t0_c11`, `t`.`cp_id_departamento3` AS `t0_c12`, `t`.`hierarquias` AS `t0_c13`, `t`.`habilitacao_dirigir` AS `t0_c14`, `t`.`veiculo_proprio` AS `t0_c15`, `t`.`disponibilidade_viajar` AS `t0_c16`, `t`.`disponibilidade_trabalhar_estados` AS `t0_c17`, `t`.`informatica_programacao_banco_de_dados` AS `t0_c18`, `t`.`informatica_softwares_desenvolvimento` AS `t0_c19`, `t`.`informatica_conhcecimentos_aplicativos_sistemas` AS `t0_c20`, `t`.`cp_especifico` AS `t0_c21`, `t`.`data_criacao` AS `t0_c22`, `t`.`data_atualizacao` AS `t0_c23` FROM `curriculo` `t` WHERE (candidatos_candidatos.id_vaga = :id_vaga) LIMIT 2 



tentei o mesmo procedimento no controller desta forma:


$inscritos=Curriculo::model()->with('candidatos')->findAll('candidatos_candidatos.id_vaga = :id_vaga',array(':id_vaga'=>$id));

e funcionou!

Alguém pode me ajudar nesta.





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




experimenta assim.

obrigado pela resposta rápida, porém ainda me retorna um erro de cdb: de alguma forma não reconhece a columna:

candidatos_candidatos, diferente de:




$inscritos=Curriculo::model()->with('candidatos')->findAll('candidatos_candidatos.id_vaga = :id_vaga',

array(':id_vaga'=>$id));



que consegue listar o que desejo.

Segue erro atual:




CDbCommand falhou ao executar o comando SQL: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'candidatos_candidatos.id_vaga' in 'where clause'. The SQL statement executed was: SELECT `t`.`id` AS `t0_c0`, `t`.`id_cadastro` AS `t0_c1`, `t`.`dp_perfil` AS `t0_c2`, `t`.`dp_esta_empregado` AS `t0_c3`, `t`.`faixa_salarial_id` AS `t0_c4`, `t`.`periodo_desejado_id` AS `t0_c5`, `t`.`contrato_desejado_id` AS `t0_c6`, `t`.`cp_ida_profissional1` AS `t0_c7`, `t`.`cp_ida_profissional2` AS `t0_c8`, `t`.`cp_ida_profissional3` AS `t0_c9`, `t`.`cp_id_departamento1` AS `t0_c10`, `t`.`cp_id_departamento2` AS `t0_c11`, `t`.`cp_id_departamento3` AS `t0_c12`, `t`.`hierarquias` AS `t0_c13`, `t`.`habilitacao_dirigir` AS `t0_c14`, `t`.`veiculo_proprio` AS `t0_c15`, `t`.`disponibilidade_viajar` AS `t0_c16`, `t`.`disponibilidade_trabalhar_estados` AS `t0_c17`, `t`.`informatica_programacao_banco_de_dados` AS `t0_c18`, `t`.`informatica_softwares_desenvolvimento` AS `t0_c19`, `t`.`informatica_conhcecimentos_aplicativos_sistemas` AS `t0_c20`, `t`.`cp_especifico` AS `t0_c21`, `t`.`data_criacao` AS `t0_c22`, `t`.`data_atualizacao` AS `t0_c23` FROM `curriculo` `t` WHERE (candidatos_candidatos.id_vaga = :id_vaga) LIMIT 2 



Caros encontrei uma solução. apaguei a relations criada no curriculo.

e fiz o left join direto na criteria.

Segue para quem estiver no mesmo problema




$criteria=new CDbCriteria;

               //$criteria->with=array('candidatos');

               $criteria->join = 'LEFT JOIN candidatos_vaga on candidatos_vaga.id_candidato=t.id';

               $criteria->condition='candidatos_vaga.id_vaga = :id_vaga';

               $criteria->params = array(':id_vaga'=>$id);

               

            

            

		$dataProvider=new CActiveDataProvider('Curriculo',array('criteria'=>$criteria));