Использование модели и критериев Yii в CGridView

Пытаюсь использовать свою модель с заменой поиска (функция пользовательского поиска):

public function combineCampInputByDate($startDate,$endDate) {

$criteria=new CDbCriteria;
$criteria->select   = 'food.*,SUM(customer) AS customer, SUM(money) AS money';
$criteria->join     = 'JOIN foodType food ON foodtype = food.foodtype ';     
$criteria->condition = "date BETWEEN '$startDate' AND '$endDate'";
$criteria->group        = 'foodtype ';
return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,
    ));
}

результатом будут атрибуты модели + другая таблица.

я пытаюсь отобразить их в представлении, но в нем нет такого атрибута, как .... (это ясно, поскольку модель не имеет атрибута, полученного из другой таблицы)

Итак, как мне использовать виджет ниже для результата модели ??

расстраивает, но рассчитываю на экспертов :) Дэнни


Редактировать: 1. Контроллер -

public function actionIndex()
{
if (isset($_POST['Filter']) && !empty($_POST['Filter']['date']) ) {
$GetDates = new GetDates();
$this->dates = $GetDates->getDatesFromPostWidget($_POST);
$model = new Campaigns;
}
else 
$model=NULL;
$this->render('index',array(
'model' => $model, 'dates' => $this->dates,
)); 
}

Модель -

public function combineCampInputByDate($startDate,$endDate) {

$criteria=new CDbCriteria;
$criteria->select = 'food.*,SUM(customer) AS customer, SUM(money) AS money';
$criteria->join = 'JOIN foodType food ON foodtype = food.foodtype '; 
$criteria->condition = "date BETWEEN '$startDate' AND '$endDate'";
$criteria->group = 'foodtype ';
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}

Вид

$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'bo-campaigns-grid',
'dataProvider'=>$model->combineCampInputByDate($dates['startDate'],$dates['endDate']),
'filter'=>$model,  
),
));
}

person Danny Valariola    schedule 07.06.2012    source источник
comment
Не понял вашего вопроса. Пожалуйста, добавьте больше кода для уточнения   -  person dInGd0nG    schedule 07.06.2012


Ответы (1)


В классе модели создайте два атрибута: public $customer и public $money.

У вас может быть столько настраиваемых атрибутов, сколько вы хотите, просто следите за их именами. (Вы не можете использовать SQL fieldname AS something, если у вас сначала нет атрибута модели something)

РЕДАКТИРОВАТЬ: Вы также должны указать CGridView, который столбцы для отображения, например

$this->widget('zii.widgets.grid.CGridView', array(
     'id'=>'bo-campaigns-grid',
     'dataProvider'=>$model->combineCampInputByDate($dates['startDate'],$dates['endDate']),
     'filter'=>$model,
     'columns'=>array(
        'customer',
        'money',
       //etc. for more detailed customization, check the links above
     ),    
   ),
));
}
person adamors    schedule 07.06.2012
comment
Боюсь, это не сработало... произошло то, что эти значения инициируются для каждого объекта, но когда я пытаюсь использовать виджет, ничего не появляется, и разбиение на страницы не работает... если я использую метод Gii Search() (по умолчанию) это работает... я что-то упускаю!! - person Danny Valariola; 07.06.2012
comment
Пожалуйста, будьте более конкретными тогда. Чего вы ожидали и что вместо этого произошло? Вы пытаетесь отобразить customer и money в CGridView. а они не появляются? - person adamors; 08.06.2012
comment
да, это именно так ... таблица в CGrid пуста, и при нажатии на номера страниц страница просто становится пустой. Все, что я хочу, это создать пользовательскую функцию для замены поиска по умолчанию в модели, а затем представить это как таблица с использованием CGrid - person Danny Valariola; 08.06.2012
comment
Я отредактировал свой ответ, попробуйте его и обратитесь к документации по column параметр CGridView, а также :) - person adamors; 08.06.2012
comment
все еще не работает ... Я думаю, что нашел обходной путь, но он тоже не работает, я опубликую его как новый вопрос. Спасибо за помощь!! - person Danny Valariola; 08.06.2012