Добрый день.
Пытаюсь построить CGridView не используя AR.
У меня достаточно большая БД со многими связующими таблицами (многие ко многим)
и для каждой из них создавать модель - не разумно.
Вот чего я добился:
Модель
public function search()
{
$connection = Yii::app()->db;
$sql = "select q.id, t.title, q.question, qt.status from tbl_test t, tbl_question_test qt, tbl_question q where t.id=qt.id_test and qt.id_question=q.id";
$command = $connection->createCommand();
$config = array(
'pagination'=>array(
'pageSize'=>11
),
);
return new CSqlDataProvider($sql, $config);
}
Контроллер
public function actionIndex()
{
$model=new Test;
$model->unsetAttributes(); // clear any default values
if(isset($_GET['ajax']) && ($_GET['ajax'] == 'test-grid'))
{
$model = new Test('search');
$model->attributes = $_GET['Test'];
$this->render('index', array('model'=>$model));
Yii::app()->end();
}
if(isset($_GET['Test']))
$model->attributes=$_GET['Test'];
$this->render('index',array(
'model'=>$model,
));
}
Вид
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'test-grid',
'selectableRows'=>2,
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
array(
'class'=>'CCheckBoxColumn',
'id'=>'questionId',
),
'id'=>array(
'name'=>'id',
'headerHtmlOptions'=>array('width' => 20),
),
'question',
'title',
'status',
),
)); ?>
Тут все работает на ура, но, если добавить в вид следующее
...
'question',
'title',
'status',
array(
'class'=>'CButtonColumn',
),
...
то вылетает ошибка Trying to get property of non-object
ругается на закрытие тега
)); ?>
Понятное дело, что проблема не в теге.
В чем может быть проблема ?
И еще, как сделать аналог в поиске
...
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
...
чтоб работал поиск по полям, но без CDbCriteria, так как он требует AR.
Спасибо