Realizzare AR query

Ciao a tutti,

sto cercando di impararead usare Yii. Ho iniziato lunedì

Ho il seguente problema:Devo realizzare la seguente query in AR

SELECT COUNT(*) as Totale FROM $tbl_name

where StartDate < 2010-02-01 AND StartDate >=2010-01-01 AND device_category_id=‘A’

Io ho fatto così. ho dichiarato una variabile pubblica $totale poi

Dal mio model Projects ho aggiunto la funzione searchReport1 che contiene:

$criteria1= new CDbCriteria;

$criteria1->select="device_category_id, COUNT(device_category_id) as Totale ";

$criteria1->condition= “prj_start_date < ‘2010-02-01’ AND prj_start_date >‘2010-01-01’”;

$criteria1->group ="device_category_id";

$totale = Projects::model()->findAll($criteria1);

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

‘criteria’=>$criteria1, ));


nel ProjectController ho aggiunto una funzione actionReport1 che contiene

$model=new Projects(‘searchReport1’);

	&#036;model-&gt;unsetAttributes();  // clear any default values


	if(isset(&#036;_GET['Projects']))


		&#036;model-&gt;attributes=&#036;_GET['Projects'];


	&#036;this-&gt;render('report1',array(


		'model'=&gt;&#036;model,

Nella view ho creato un file Report1 che contiene

$this->widget(‘zii.widgets.grid.CGridView’, array(

'id'=&gt;'projects-grid',


'dataProvider'=&gt;&#036;model-&gt;searchReport1(),


'filter'=&gt;&#036;model,


'columns'=&gt;array(








   'device_category_id',


   'totale',


   array(


    'header' =&gt; 'Totale',


    'value' =&gt; 'totale',





   ),    

Ho usato una gridview in funzione che devo poi estendere la mia query per tutti i mesi dell’anno,ma inizialmente volevo vedere se un record me lo scriveva.

Attualmente I campi device category e totale sono vuoti

Aiuto!!!!!

Secondo me dovrebbe funzionare.

Cosa succede se fai




$criteria1= new CDbCriteria;

$criteria1->select="device_category_id, COUNT(device_category_id) as Totale ";

$criteria1->condition= "prj_start_date < '2010-02-01' AND prj_start_date >'2010-01-01'";

$criteria1->group ="device_category_id";

$totale = Projects::model()->findAll($criteria1);

foreach ($totale as $tot) echo $tot->totale.$tot->device_category_id;



Vedi la lista di codici, almeno?

Ciao,

ho provato come mi hai suggerito, riporto il codice:

$criteria1= new CDbCriteria;

$criteria1->select="device_category_id, COUNT(device_category_id) as Totale ";

$criteria1->condition= “prj_start_date < ‘2010-02-01’ AND prj_start_date >‘2010-01-01’”;

$criteria1->group ="device_category_id";

$totale = Projects::model()->findAll($criteria1);

foreach ($totale as $tot) echo $tot->totale.$tot->device_category_id;

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

‘criteria’=>$criteria1, ));

ma non mi fa vedere neanche le category

mi visualizza le intestazioni dei campi e sotto no records found

Allora ho provato ad eseguire una query semplice tipo:

$criteria1= new CDbCriteria;

$criteria1->select=‘prj_start_date,prj_end_date,device_category_id’ ;

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

‘criteria’=>$criteria1, ));

e riesco a vedere i campi,quindi suppongo che la query sul count non faccia il suo dovere

uggerimenti?

Non e’ che magari non ci sono elementi con prj_start_date < ‘2010-02-01’ AND prj_start_date >'2010-01-01?

Prova a visualizzare la query e vedi cosa ne pensa phpmyadmin.

Puoi configurare CWebLogRoute in modo da visualizzare tutte le query.

Nel tuo config/main:




		'log'=>array(

			'class'=>'CLogRouter',

			'routes'=>array(

				array(

					'class'=>'CFileLogRoute',

					'levels'=>'error, warning',

				),

				array(

					'class'=>'CWebLogRoute',

					'levels'=>'trace',

				),

			),


		),



Mi scuso… ho perso tempo io e sopratutto tu… ti chiedo scusa Zaccaria era una cavolata…

la query era giusta era sbagliata la condition

$criteria1->condition= " prj_start_date <= ‘2010-12-01’ AND prj_start_date >=‘2010-11-01’ AND device_category_id=‘1’";

ora va…

grazie e scusa ancora

starò piu attento

Addeso che hai risolto il problema… Sarebbe bello che lo stesso lo scrivessi nel forum inglese…

Ciao ,

ok lo riporterò pure sul forum inglese molto volentieri.

Grazie ancora ;)