Pracuję nad aplikacją, która współpracuje z bazą MSSQL 2008. Jednym z zadań jest stworzenie wyszukiwarki produktów. Dane do wyszukiwarki będą pobierane przy pomocy widoków (views), po czym wyświetlane w CGridView. Dla przykładu dane jakie mają być zwrócone to: numer_pozycji, nazwa, ilosc_dostepna, magazyn i cena. Przy czym cena będzie dodatkowo wyliczana przy pomocy procedury.
Czy dla tego typu funkcjonalności należy tworzyć model?, w którym zostaną utworzone metody pobierające dane np.: przy pomocy createCommand. Czy wykonywać to w kontrolerze?
Ja w przypadku kiedy nie korzystam z modelu (za duże obciążenie przy skomplikowanych zapytaniach),to korzystam z zapytań sql bezpośrednio do bazy i potem wrzucam wynik do CArrayDataProvider żeby móc wyświetlić to w CGridView.
Przeważnie na wszystkie tabele w bazie tworzę odpowiednie modele, więc kod do generowania CArrayDataProvider wrzucam jako metodę danego modelu. Model lub CArrayDataProvider przekazuję w kontrolerze jako zmienną do widoku.
.viktor. dzięki, a co w przypadku gdy nie chcę generować modelu CActiveRecord dla tabel, które łącze w views gdyż dane z nich używam tylko do wyświetlania?
Na ta chwilę stworzyłem klasę Search w katalogu models, która nie dziedziczy po CActiveRecord. Coś takiego:
class Search
{
public function search()
{
$products = Yii::app()->db2->createCommand()
->select()
->from('KRproducts')
->where('stock > 0')
->limit(40)
->queryAll();
$dataProvider = new CArrayDataProvider($products, array(
'keyField' => 'itemnumber',
'pagination' => false,
));
return $dataProvider;
}
public static function getPrice($customerNumber, $itemnumber)
{
$command = Yii::app()->db2->createCommand("exec getPrice '$customerNumber','$itemnumber'");
return $command->queryScalar();
}
}