2013-06-30 2 views
0

Я пытаюсь создать класс Yii CModel, чтобы я мог просматривать данные в отфильтрованной сортированной сетке.Пошаговое руководство по созданию yii CModel

Это не должно быть слишком сложно, но я не могу, чтобы жизнь меня определяла, как это сделать. Я ищу пошаговый набор инструкций о том, как это сделать, но я ничего не могу найти. :(

Я не хочу использовать хранение базы данных, поэтому я простирающийся CModel.

Я положил какие-то коды ниже, но я просто не знаю, что делать дальше. Где делает ?.. фактические данные идут он должен идти в массив или что-то

Любая помощь будет большим

Я поставил код в ниже, если это помогает Вот моя модель:

class MyModel extends CModel{ 
    public $id, 
      $attribute1, 
      $attribute2, 
      $attribute3; 

    public function search(){ 
     $criteria = new CDbCriteria; 

     $criteria->compare('id', $this->id); 
     $criteria->compare('attribute1', $this->attribute1); 
     $criteria->compare('attribute2', $this->attribute2); 
     $criteria->compare('attribute3', $this->attribute3); 

     return new CActiveDataProvider($this, array(
      'criteria' => $criteria, 
     )); 
    } 

public function attributeNames(){ 
     return array(
      'id', 
      'attribute1', 
      'attribute2', 
      'attribute3', 
     ); 
    } 
} 

Вот моя ко ntroller:

class MyController extends CController{ 

    public function actionIndex() { 
     $model = new MyModel('search'); 

     $model->unsetAttributes(); 

     if (isset($_GET['MyModel'])){ 
      $model->setAttributes($_GET['MyModel']); 
     } 

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

И вот мое мнение:

$this->widget('bootstrap.widgets.TbGridView', array(
    'type'=>'striped bordered condensed', 
    'dataProvider'=>$model->search(), 
    'filter' => $model(), 
    'columns'=>array(
     'id', 
     'attribute1', 
     'attribute2', 
     'attribute3', 
    ) 
)); 
+0

Если вы не хотите использовать бэкэнд базы данных, вы не можете использовать 'CDbCriteria'. Часть 'Db' означает базу данных. Вы собираетесь использовать это постоянное хранилище? Откуда берутся данные, которые вы хотите фильтровать/сортировать? Из пользовательского ввода, другого? –

+0

Привет @WillemRenzema! Нет, я не намерен использовать его для постоянного хранения. Я хочу, чтобы модель выполняла некоторые формулы, входы которых поступают из набора моделей CActiveRecord. Я хочу, чтобы табулировать вывод формул в виде Grid, предпочтительно TbGridView. Имеет ли это смысл? Спасибо за вашу помощь. –

+0

Где вы хотите, чтобы данные шли? Почему вы не хотите использовать базу данных? – jmarkmurphy

ответ

0

Если вы используете только данные для зрения сетки, можно использовать CArrayDataProvider.

+0

Отлично. Спасибо. Так где я буду использовать это? Я предполагаю, что будет метод, возвращающий экземпляр CArrayDataProvider? –

+0

Нажмите на ссылку на API для примера - вы просто передадите массив вместо результата DB raw. Создайте объект CArrayDataProvider и используйте его как поставщика данных в своем виджете. – ldg

+0

Это не сработает, если я не переопределю метод поиска в моей модели. Это верно? –

Смежные вопросы