Yii Framework Forum: Metodo Search Con Join - Yii Framework Forum

Jump to content

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

Metodo Search Con Join Rate Topic: -----

#1 User is offline   messema 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 45
  • Joined: 16-May 12

Posted 25 July 2013 - 05:13 AM

Ho due tabelle(inventario_pc, arcdipan) senza chiave esterna o altri vincoli tra loro, entrambe hanno una colonna "cod_dip" col codice del dipendente. Vorrei fare una join tra le due tabelle nel metodo search del model inventarioPc in modo tale che tramite il cod_dip da arcdipan riesco a prendere il parametro cognome.

Questo è ciò che ho fatto riprendendo questo topic: http://www.yiiframew...in-in-adminphp/
public function search()
	{
		// Warning: Please modify the following code to remove attributes that
		// should not be searched.

		$criteria=new CDbCriteria;
		$criteria->join = 'LEFT JOIN ARCDIPAN as tbl_alias ON tbl_alias.cod_dip =  cod_dip';
		
		$criteria->compare('id_postazione',$this->id_postazione);
		$criteria->compare('cod_dip',$this->cod_dip,true);
		$criteria->compare('nomecomputer',$this->nomecomputer,true);
		$criteria->compare('os',$this->os,true);
		$criteria->compare('ram',$this->ram,true);
		$criteria->compare('disco',$this->disco,true);
		$criteria->compare('processore',$this->processore,true);
		$criteria->compare('licenza',$this->licenza,true);
		$criteria->compare('ip_pc',$this->ip_pc,true);

		$criteria->compare('tbl_alias.COGNOME',$this->tbl_alias->COGNOME, true);
		
		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}


Nella view:
$this->widget('bootstrap.widgets.TbGridView',array(
		'type'=>'striped bordered condensed',
		'id'=>'inventario-pc-grid',
		'dataProvider'=>$model->search(),
		'filter'=>$model,
		'columns'=>array(
			//'id_postazione',
			'',
			'nomecomputer',
			'os',
			'ram',
			'disco',
			'ip_pc',
			'ARCDIPAN.COGNOME',
			array(
				'class'=>'bootstrap.widgets.TbButtonColumn',
			),
		),
	));

0

#2 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,986
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 25 July 2013 - 05:38 AM

Io eviterei di modificare il metodo search in quel modo. Verrebbe eseguita sempre quella join. Preferirei usare gli scopes, li trovo più comodi.
0

#3 User is offline   messema 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 45
  • Joined: 16-May 12

Posted 26 July 2013 - 03:42 AM

View Postsensorario, on 25 July 2013 - 05:38 AM, said:

Io eviterei di modificare il metodo search in quel modo. Verrebbe eseguita sempre quella join. Preferirei usare gli scopes, li trovo più comodi.

E' la prima volta che li utilizzo, o meglio mi è sempre piaciuto utilizzarli.
Le mie due tabelle sono in allegato.
Ho creato il metodo nel model InventarioPc:
public function viewPostazioni()
	{
		$this->getDbCriteria()->mergeWith(array(
				'select'=>'a.COGNOME, a.NOME',
				'join'=>'LEFT JOIN ARCDIPAN as a ON a.CODDIP =  cod_dip',
		));
		return $this;
	}

Poi nel controller ho messo il richiamo al metodo:
public function actionAdmin()
	{

		$model=InventarioPc::model()->viewPostazioni()->findAll();


		$this->render('admin',array(
			'model'=>$model,
		));
	}

E nella view:
$this->widget('bootstrap.widgets.TbGridView',array(
		'type'=>'striped bordered condensed',
		'id'=>'inventario-pc-grid',
		'dataProvider'=>$model,
'filter'=>
		'columns'=>array(
			//'id_postazione',
			'',
			'nomecomputer',
			'os',
			'ram',
			'disco',
			'ip_pc',
			/*array(            
                  'name'=>'search_location',
                  'value'=>'$data->ARCDIPAN->COGNOME',
                  'header'=>'ARCDIPAN.COGNOME',
                ),*/
			/*
			'processore',
			'licenza',
			*/
			array(
				'class'=>'bootstrap.widgets.TbButtonColumn',
			),
		),
	));


Ma non capisco come passare il "provider". Mi servirebbe creare nella view una gridview con filtro.

Attached File(s)


0

#4 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,986
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 02 August 2013 - 01:01 AM

Il dataProvider è la variabile $model, basta fare si che quel $mode, sia un provider customizzato da te.
0

#5 User is offline   messema 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 45
  • Joined: 16-May 12

Posted 05 August 2013 - 05:38 AM

View Postsensorario, on 02 August 2013 - 01:01 AM, said:

Il dataProvider è la variabile $model, basta fare si che quel $mode, sia un provider customizzato da te.

Capito.

Ho "risolto" il problema creando una relation cosi:
public function relations()
	{
		return array(
				'dipendente' => array(self::BELONGS_TO, 'ARCDIPAN', '', 'on' => 'cod_dip=CODDIP'),
		);
	}


e poi un provider customizzato.
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