Sort Array Di Cactivedataprovider Dopo Il Getdata

Credo di entrare nel banale, ma non riesco proprio a venirne a capo.




$dataProvider1=new CActiveDataProvider('Table1', array(

			'criteria'=>array(

				'condition'=>'ORDER BY name',

	                )

));	

		

$dataProvider2=new CActiveDataProvider('Table2', array(

			'criteria'=>array(

		                'condition'=>'ORDER BY name',

	                )

));			

$array1 = $dataProvider1->getData();

$array2= $dataProvider2->getData();



poi copio array1 dentro un nuovo array, dopodichè eseguo un foreach su array2, andando ad aggiungere il valore al nuovo array, se soddisfo una determinata condizione




$newarray = $array1;

foreach ($array2 as $value){

	if($value->toCheck >= 1){

		$newarray[] = $value;

	}

}



Dentro la View




foreach($newarray as $i => $item)

Yii::app()->controller->renderPartial('_view',array('data' => $item));

Per funzionare funziona, l’unico problema è che ho bisogno che newarray sia riordinato per ‘name’. Come potrei fare? Grazie!

Dovresti implementare un merge-sort, e non attaccare un array in coda all’altro.

Non c’è proprio modo di effettuare un sort sull’array finale?

Non ho idea di come dovrebbe funzionare il merge-sort, come soluzione potrei ciclare newarray, prendere solo le info che mi servono, metterle in un nuovo array, e riordinarmelo. E poi non usare più renderPartial…

Secondo me puoi fare quello che devi fare in sql e tirare fuori il risutato definitivo, senza cicli e riordini in php (se hai un milione di record cosa fai, tiri fuori un milione di dati per poi mostrarne 10?)

Si hai ragione. Lavorando con phpmyadmin mi sono creato le query corrispondenti, però poi come faccio a usare una query ad esempio come questa




select client.* from client left join website on client.id = website.client_id AND website.contract_end_date >=now() where website.id is not null group by client.id



con CActiveDataProvider? :blink:

Mi rispondo da solo, ho risolto così


		

$Criteria = new CDbCriteria;

$Criteria->alias = 'client';

$Criteria->join = 'left join website on client.id = website.client_id AND website.contract_end_date >=now()';

$Criteria->condition = 'website.id is not null group by client.id ORDER BY client.name';

$DataProviderNotExpired=new CActiveDataProvider('Client', array(

	'criteria' => $Criteria,

));