Использование модели и критериев 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,
),
));
}
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
),
),
));
}