Yii Framework Forum: Ajudar Em Uma Consulta Com Relação - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Ajudar Em Uma Consulta Com Relação Rate Topic: -----

#1 User is offline   Edson Rodrigues 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 376
  • Joined: 10-August 10

Posted 10 October 2012 - 07:39 AM

Olá galera tenho um model curriculo que tem varias relaçoes. o Caso é que gostaria que mostra-se no grid apenas os registro que a relaçao:

'historicoProfissional' => array(self::HAS_MANY, 'HistoricoProfissional', 'curriculoid'),
'objetivoProfissional' => array(self::HAS_MANY, 'ObjetivoProfissional', 'idcurriculo'),


Tenha algum registro cadastrado, caso nao tenha não é para aparecer no grid o registro do curriculo.

segue o model curriculo:

<?php

/**
 * This is the model class for table "curriculo".
 *
 * The followings are the available columns in table 'curriculo':
 * @property integer $id
 * @property string $nome
 * @property string $cep
 * @property string $endereco
 * @property string $bairro
 * @property string $estado
 * @property string $cidade
 * @property string $telefone
 * @property string $telefone2
 * @property string $celular
 * @property string $nacionalidade
 * @property string $datanascimento
 * @property string $sexo
 * @property string $estadocivil
 * @property integer $filhos
 * @property string $cpf
 * @property string $rg
 * @property string $habilitacao
 * @property string $deficiencias
 * @property string $auditiva
 * @property string $fisica
 * @property string $fala
 * @property string $mental
 * @property string $visual
 * @property string $defecienteobservacao
 * @property string $veiculo
 * @property string $obsercacao
 * @property string $senha
 * @property string $datacadastro
 */
class Curriculo extends CActiveRecord
{
	/**
	 * Returns the static model of the specified AR class.
	 * @return Curriculo the static model class
	 */
        public $pesquisar;
       
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'curriculo';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('nome, senha, cep, endereco, bairro, estado, cidade, telefone, nacionalidade, datanascimento, numero, sexo, estadocivil, filhos, cpf, rg, deficiencias', 'required'),
			array('filhos', 'numerical', 'integerOnly'=>true),
			array('nome, endereco, complemento', 'length', 'max'=>100),
			array('cep, senha', 'length', 'max'=>15),
			array('bairro, estado, cidade, veiculo', 'length', 'max'=>45),
			array('telefone, telefone2, celular, nacionalidade, sexo, estadocivil', 'length', 'max'=>20),
			array('cpf', 'length', 'max'=>14),
			array('rg', 'length', 'max'=>12),
                        array('senha','length', 'max'=>20, 'min' => 6,),
			array('habilitacao, deficiencias', 'length', 'max'=>3),
			array('auditiva, fisica, fala, mental, visual', 'length', 'max'=>1),
			array('defecienteobservacao, obsercacao, datacadastro', 'safe'),
			// The following rule is used by search().
			// Please remove those attributes that should not be searched.
			array('id, nome, cep, endereco, bairro, estado, cidade, telefone, telefone2, celular, nacionalidade, datanascimento, sexo, estadocivil, filhos, cpf, rg, habilitacao, deficiencias, auditiva, fisica, fala, mental, visual, defecienteobservacao, veiculo, obsercacao, senha, datacadastro', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	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(
			'formacao' => array(self::HAS_MANY, 'Formacao', 'idcurriculo'),
                        'cursoComplementar' => array(self::HAS_MANY, 'CursoComplementar', 'idcurriculo'),
			'historicoProfissional' => array(self::HAS_MANY, 'HistoricoProfissional', 'curriculoid'),
			'objetivoProfissional' => array(self::HAS_MANY, 'ObjetivoProfissional', 'idcurriculo'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'id' => 'ID',
			'nome' => 'Nome',
			'cep' => 'Cep',
			'endereco' => 'Endereco',
			'bairro' => 'Bairro',
			'estado' => 'Estado',
			'cidade' => 'Cidade',
			'telefone' => 'Telefone',
			'telefone2' => 'Telefone(opcional)',
			'celular' => 'Celular',
			'nacionalidade' => 'Nacionalidade',
			'datanascimento' => 'Data Nascimento',
			'sexo' => 'Sexo',
			'estadocivil' => 'Estado Civil',
			'filhos' => 'Qtde de Filhos',
			'cpf' => 'CPF',
			'rg' => 'Rg',
			'habilitacao' => 'Habilitação',
			'deficiencias' => 'Tem algum deficiência?',
			'auditiva' => 'Auditiva',
			'fisica' => 'Física',
			'fala' => 'Fala',
			'mental' => 'Mental',
			'visual' => 'Visual',
                        'complemento' => 'Complemento',
			'defecienteobservacao' => 'Observação da Deficiência',
			'veiculo' => 'Veiculo',
			'obsercacao' => 'Observação',
			'senha' => 'Senha',
                        'numero'=>'Número',
			'datacadastro' => 'Data Cadastro',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
	 */


	public function search()
	{
		// Warning: Please modify the following code to remove attributes that
		// should not be searched.

		$criteria=new CDbCriteria;
                if($this->pesquisar == ''){
                        		$criteria->compare('id',$this->id);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                }else{
            
                       		$criteria->compare('id',$this->pesquisar,true,'OR');

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

		$criteria->compare('cep',$this->pesquisar,true,'OR');

		$criteria->compare('endereco',$this->pesquisar,true,'OR');

		$criteria->compare('bairro',$this->pesquisar,true,'OR');

		$criteria->compare('estado',$this->pesquisar,true,'OR');

		$criteria->compare('cidade',$this->pesquisar,true,'OR');

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

		$criteria->compare('telefone2',$this->pesquisar,true,'OR');

		$criteria->compare('celular',$this->pesquisar,true,'OR');

		$criteria->compare('nacionalidade',$this->pesquisar,true,'OR');

		$criteria->compare('datanascimento',$this->pesquisar,true,'OR');

		$criteria->compare('sexo',$this->pesquisar,true,'OR');

		$criteria->compare('estadocivil',$this->pesquisar,true,'OR');

		$criteria->compare('filhos',$this->pesquisar,true,'OR');

		$criteria->compare('cpf',$this->pesquisar,true,'OR');

		$criteria->compare('rg',$this->pesquisar,true,'OR');

		$criteria->compare('habilitacao',$this->pesquisar,true,'OR');

		$criteria->compare('deficiencias',$this->pesquisar,true,'OR');

		$criteria->compare('auditiva',$this->pesquisar,true,'OR');

		$criteria->compare('fisica',$this->pesquisar,true,'OR');

		$criteria->compare('fala',$this->pesquisar,true,'OR');

		$criteria->compare('mental',$this->pesquisar,true,'OR');

		$criteria->compare('visual',$this->pesquisar,true,'OR');

		$criteria->compare('defecienteobservacao',$this->pesquisar,true,'OR');

		$criteria->compare('veiculo',$this->pesquisar,true,'OR');

		$criteria->compare('obsercacao',$this->pesquisar,true,'OR');

		$criteria->compare('senha',$this->pesquisar,true,'OR');

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

                }

		return new CActiveDataProvider(get_class($this), array(
			'criteria'=>$criteria,
                        'pagination'=>array(
                        'pageSize'=>Yii::app()->params['PageSize'],
                ),
		));
	}
         public function beforeSave() {
        	if(parent::beforeSave()){
			if($this->isNewRecord){
                                $this->datacadastro=date("Y-m-d H:i:s");

        		}
                        return true;
                }else{
			return false;
                }
        }
}


Agradeço...
0

#2 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 799
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 10 October 2012 - 10:06 AM

Edson,

Se estiver usando a função search(), e somente adicionar:

$criteria->with = array('historicoProfissional', 'objetivoProfissional');


Ai somente será listado os dados que tiver relação com a tabela 'curriculo'
Newerton Vargas de Araújo
0

#3 User is offline   Edson Rodrigues 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 376
  • Joined: 10-August 10

Posted 10 October 2012 - 12:31 PM

View PostNewerton, on 10 October 2012 - 10:06 AM, said:

Edson,

Se estiver usando a função search(), e somente adicionar:

$criteria->with = array('historicoProfissional', 'objetivoProfissional');


Ai somente será listado os dados que tiver relação com a tabela 'curriculo'


Blz Newerton,

Então estou usando a função search(), so que ainda continua mostrando na grid registro que nao tem dados cadastrado em 'historicoProfissional', 'objetivoProfissional', pois como pode ver o que quero é que se o usuario não preencher todos os dados o curriculo dele não entra na lista de seleção.

Fiz o que pediu mais continua mostrando... será que tem alguma forma de usar o count() tipo se o valor for 0 tanto nas relaçoes 'historicoProfissional' e 'objetivoProfissional' este registro nao entra na lista.

valew
0

#4 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 799
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 10 October 2012 - 02:31 PM

Então adiciona embaixo

$criteria->together = true;

Newerton Vargas de Araújo
0

#5 User is offline   Adrian Lucas 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 215
  • Joined: 13-October 11
  • Location:João Pessoa - Paraíba

Posted 11 October 2012 - 06:10 AM

Amigo depois de ter feito as ligações tenta colocar mais ou menos assim:
$criteria->having = 'COUNT(objetivoProfissional.idcurriculo) > 0';

Adrian Lucas
A fé em Deus nos faz crer no incrível,
ver o invisível e realizar o impossível.

0

#6 User is offline   Edson Rodrigues 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 376
  • Joined: 10-August 10

Posted 11 October 2012 - 09:27 AM

fiz o que pediram...so que agora esta retornando um erro:

CDbCommand falhou ao executar o comando SQL: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'objetivoProfissional.idcurriculo' in 'having clause'


Meu model curriculo:
<?php

/**
 * This is the model class for table "curriculo".
 *
 * The followings are the available columns in table 'curriculo':
 * @property integer $id
 * @property string $nome
 * @property string $cep
 * @property string $endereco
 * @property string $bairro
 * @property string $estado
 * @property string $cidade
 * @property string $telefone
 * @property string $telefone2
 * @property string $celular
 * @property string $nacionalidade
 * @property string $datanascimento
 * @property string $sexo
 * @property string $estadocivil
 * @property integer $filhos
 * @property string $cpf
 * @property string $rg
 * @property string $habilitacao
 * @property string $deficiencias
 * @property string $auditiva
 * @property string $fisica
 * @property string $fala
 * @property string $mental
 * @property string $visual
 * @property string $defecienteobservacao
 * @property string $veiculo
 * @property string $obsercacao
 * @property string $senha
 * @property string $datacadastro
 */
class Curriculo extends CActiveRecord
{
	/**
	 * Returns the static model of the specified AR class.
	 * @return Curriculo the static model class
	 */
        public $pesquisar;
       
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'curriculo';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('nome, senha, cep, endereco, bairro, estado, cidade, telefone, nacionalidade, datanascimento, numero, sexo, estadocivil, filhos, cpf, rg, deficiencias', 'required'),
			array('filhos', 'numerical', 'integerOnly'=>true),
			array('nome, endereco, complemento', 'length', 'max'=>100),
			array('cep, senha', 'length', 'max'=>15),
			array('bairro, estado, cidade, veiculo', 'length', 'max'=>45),
			array('telefone, telefone2, celular, nacionalidade, sexo, estadocivil', 'length', 'max'=>20),
			array('cpf', 'length', 'max'=>14),
			array('rg', 'length', 'max'=>12),
                        array('senha','length', 'max'=>20, 'min' => 6,),
			array('habilitacao, deficiencias', 'length', 'max'=>3),
			array('auditiva, fisica, fala, mental, visual', 'length', 'max'=>1),
			array('defecienteobservacao, obsercacao, datacadastro', 'safe'),
			// The following rule is used by search().
			// Please remove those attributes that should not be searched.
			array('id, nome, cep, endereco, bairro, estado, cidade, telefone, telefone2, celular, nacionalidade, datanascimento, sexo, estadocivil, filhos, cpf, rg, habilitacao, deficiencias, auditiva, fisica, fala, mental, visual, defecienteobservacao, veiculo, obsercacao, senha, datacadastro', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	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(
			'formacao' => array(self::HAS_MANY, 'Formacao', 'idcurriculo'),
                        'cursoComplementar' => array(self::HAS_MANY, 'CursoComplementar', 'idcurriculo'),
			'historicoProfissional' => array(self::HAS_MANY, 'HistoricoProfissional', 'curriculoid'),
			'objetivoProfissional' => array(self::HAS_MANY, 'ObjetivoProfissional', 'idcurriculo'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'id' => 'ID',
			'nome' => 'Nome',
			'cep' => 'Cep',
			'endereco' => 'Endereco',
			'bairro' => 'Bairro',
			'estado' => 'Estado',
			'cidade' => 'Cidade',
			'telefone' => 'Telefone',
			'telefone2' => 'Telefone(opcional)',
			'celular' => 'Celular',
			'nacionalidade' => 'Nacionalidade',
			'datanascimento' => 'Data Nascimento',
			'sexo' => 'Sexo',
			'estadocivil' => 'Estado Civil',
			'filhos' => 'Qtde de Filhos',
			'cpf' => 'CPF',
			'rg' => 'Rg',
			'habilitacao' => 'Habilitação',
			'deficiencias' => 'Tem algum deficiência?',
			'auditiva' => 'Auditiva',
			'fisica' => 'Física',
			'fala' => 'Fala',
			'mental' => 'Mental',
			'visual' => 'Visual',
                        'complemento' => 'Complemento',
			'defecienteobservacao' => 'Observação da Deficiência',
			'veiculo' => 'Veiculo',
			'obsercacao' => 'Observação',
			'senha' => 'Senha',
                        'numero'=>'Número',
			'datacadastro' => 'Data Cadastro',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
	 */


	public function search()
	{
		// Warning: Please modify the following code to remove attributes that
		// should not be searched.

		$criteria=new CDbCriteria;
                if($this->pesquisar == ''){
                        		$criteria->compare('id',$this->id);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                }else{
            
                       		$criteria->compare('id',$this->pesquisar,true,'OR');

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

		$criteria->compare('cep',$this->pesquisar,true,'OR');

		$criteria->compare('endereco',$this->pesquisar,true,'OR');

		$criteria->compare('bairro',$this->pesquisar,true,'OR');

		$criteria->compare('estado',$this->pesquisar,true,'OR');

		$criteria->compare('cidade',$this->pesquisar,true,'OR');

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

		$criteria->compare('telefone2',$this->pesquisar,true,'OR');

		$criteria->compare('celular',$this->pesquisar,true,'OR');

		$criteria->compare('nacionalidade',$this->pesquisar,true,'OR');

		$criteria->compare('datanascimento',$this->pesquisar,true,'OR');

		$criteria->compare('sexo',$this->pesquisar,true,'OR');

		$criteria->compare('estadocivil',$this->pesquisar,true,'OR');

		$criteria->compare('filhos',$this->pesquisar,true,'OR');

		$criteria->compare('cpf',$this->pesquisar,true,'OR');

		$criteria->compare('rg',$this->pesquisar,true,'OR');

		$criteria->compare('habilitacao',$this->pesquisar,true,'OR');

		$criteria->compare('deficiencias',$this->pesquisar,true,'OR');

		$criteria->compare('auditiva',$this->pesquisar,true,'OR');

		$criteria->compare('fisica',$this->pesquisar,true,'OR');

		$criteria->compare('fala',$this->pesquisar,true,'OR');

		$criteria->compare('mental',$this->pesquisar,true,'OR');

		$criteria->compare('visual',$this->pesquisar,true,'OR');

		$criteria->compare('defecienteobservacao',$this->pesquisar,true,'OR');

		$criteria->compare('veiculo',$this->pesquisar,true,'OR');

		$criteria->compare('obsercacao',$this->pesquisar,true,'OR');

		$criteria->compare('senha',$this->pesquisar,true,'OR');

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

                }
                
               $criteria->order = 'datacadastro DESC';
                  
               $criteria->with = array('historicoProfissional', 'objetivoProfissional');
               
               $criteria->together = true;
               
               $criteria->having = 'COUNT(objetivoProfissional.idcurriculo) > 0';

		return new CActiveDataProvider(get_class($this), array(
			'criteria'=>$criteria,
                        'pagination'=>array(
                        'pageSize'=>Yii::app()->params['PageSize'],
                ),
		));
	}
         public function beforeSave() {
        	if(parent::beforeSave()){
			if($this->isNewRecord){
                                $this->datacadastro=date("Y-m-d H:i:s");

        		}
                        return true;
                }else{
			return false;
                }
        }
}


valuew
0

#7 User is offline   Lothor 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 147
  • Joined: 05-August 11
  • Location:Brazil

Posted 11 October 2012 - 09:33 AM

Edson, para usar o Having é necessário que você agrupe a consulta por alguma coluna, tenta o seguinte:

$criteria->group => 'objetivoProfissional.idcurriculo';

Não sei se isso vai resolver teu problema, mas deve remover o erro que está dando.
0

#8 User is offline   Edson Rodrigues 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 376
  • Joined: 10-August 10

Posted 14 October 2012 - 05:46 PM

View PostLothor, on 11 October 2012 - 09:33 AM, said:

Edson, para usar o Having é necessário que você agrupe a consulta por alguma coluna, tenta o seguinte:

$criteria->group => 'objetivoProfissional.idcurriculo';

Não sei se isso vai resolver teu problema, mas deve remover o erro que está dando.


vou testar!
valew
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users