Cgridview + Csqldataprovider(Без Ar)

Добрый день.

Пытаюсь построить 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.

Спасибо

По первой проблеме: наверняка вставили дополнительную колонку не в то место, а именно не в ‘colums’, а на уровень выше, например, затерев скобку.

А по второму, попробуйте посмотреть тут http://www.yiiframework.com/forum/index.php/topic/30181-csqldataprovider-filtering/ в самом низу.

К сожалению дело не в этом, так как вставленно все верно и если закоментить тело метода search в модели, то все отображается отлично. Проблема где-то там

Посмотрел, сделал как там, однако почему-то данные не отправляются из грида в контроллер

Поправка, с фильтром разобрался, в се заработало, спасибо огромное.

Единственное что осталось, это подключить кнопки действий для записей, не хотят работать и все

Все. Еще раз спасибо Artur Zhdanov.

С кнопками тоже разобрался, если кому интересно, решение нашел тут http://www.yiiframework.com/forum/index.php/topic/26029-cant-use-cbuttoncolumn-in-cgridview-fed-with-csqldataprovider/