[AYUDA]2 controladores 1 vista

Hola chicos, soy nueva usando el framework, tengo ciertas dudas que espero que me puedan ayudar a solucionar.

estoy haciendo una aplicacion de tarificación, en la cual tengo Proveedores y cada proveedor tiene muchos canales asociados, he creado los modelos y las vistas respectivas para cada tabla, más sin embargo queria crear una vista que sea la consulta de un proveedor específico y que a su vez en esa misma vista pueda ver un listado(como el se genera con CGridView) con los canales asociados a ese proveedor. intenté realizar cargar la vista con 2 modelos más sin embargo me da el siguiente error


Fatal error: Call to a member function getData() on a non-object in C:\xampp\htdocs\yii\framework\zii\widgets\CBaseListView.php on line 105

en mi controlador de proveedor estoy haciendo lo siguiente:


	public function actionView($id)

	{

		$this->pageTitle = 'Consultar Proveedor';

                $this->render('view',array(

			'model'=>$this->loadModel($id),

                        'model2'=>$this->loadModelChilds($id),

		));

	}        	

	public function loadModel($id)

	{

		$model=Proveedor::model()->findByPk((int)$id);

		if($model===null)

			throw new CHttpException(404,'El registro consultado no existe.');

		return $model;

	}

      

	public function loadModelChilds($id)

	{

		$model=Canal::model()->find('idProveedor='.$id);

                $data['canales'] = CHtml::listData($model, 'idProveedor', 'correlativo','patronId');

		if($model===null)

			throw new CHttpException(404,'El registro consultado no existe.');

		return $data['canales'];

	}

y la vista que estoy creando:


<h1>Consultar Proveedor <?php echo $model->nombre; ?></h1>


<?php $this->widget('zii.widgets.CDetailView', array(

	'data'=>$model,

	'attributes'=>array(

		'idProveedor',

		'nombre',

		'prefijo',

	),

)); ?>

<br/>

<h1>Canales asociados al proveedor </h1>


<?php $this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'canal-grid',

	'dataProvider'=>$model2,

	'filter'=>$model2,

	'columns'=>array(

		'proveedorR.nombre',

                'correlativo',

		'patronId',

		array(

			'class'=>'CButtonColumn',                       

		),

	),

)); ?>

De antemano agradezco mucho la ayuda que me puedan brindar con este problema, disculpen si no lo estoy haciendo como se debe, estoy aprendiendo y me gustaria que me ayudaran.!

zii.widgets.grid.CGridView recibe en el parametro dataProvider

un objeto de ese tipo

prueba modificando lo siguiente





public function loadModelChilds($id)

        {

                

		$dataProvider=new CActiveDataProvider('Canal');

		$criteria=new CDbCriteria;

                $criteria->condition='idProveedor='.$id;

                $dataProvider->setCriteria($criteria);

		return $dataProvider; 

}



[edit]

creo que tienes un problema con el parámetro filter también

[edit 2]

creo que el modelo a usar para el filtro es Canal

pero para el listado de canales del proveedor, debería ser algo como

ProveedorCanales?

Hola, Genial!!, muchas Gracias Horacio, ya lo habia estado probando pero creo que el problema era el filtro , porque me daba otro error por eso habia desistido de usar el dataProvider, por ahora no necesitaría filtrar.

en cuanto a los modelos, a ver si te entendí bien, para definir un listado de canales de proveedor, debo crear un modelo intermedio?

perdón, creo que me equivoque

asi debería ser





public function loadModelChilds($id)

        {

                

        $dataProvider=new CActiveDataProvider('Canal');

        $criteria=new CDbCriteria;

                $criteria->condition='idProveedor='.$id;

                $dataProvider->setCriteria($criteria);

        return $dataProvider; 

}




y luego





$this->widget('zii.widgets.grid.CGridView', array(

        'id'=>'canal-grid',

        'dataProvider'=>$model2->search(), 

        'filter'=>$model2,

        'columns'=>array(

        'proveedorR.nombre',

.....



de esa forma no me funciona, me da el siguiente error,


CActiveDataProvider does not have a method named "search". 

imagino (dentro de lo que sé de yii) que debe ser porque no está trayendo el modelo completo, sino solo la busqueda, si coloco el widget solo con el dataprovider sin el filtro


$this->widget('zii.widgets.grid.CGridView', array(

        'id'=>'canal-grid',

        'dataProvider'=>$model2, 

...

funciona lo que quiero hacer sin la opcion de filtar, ahora si coloco el filtro como


...'filter'=>$model2,...

me da el siguiente error


CActiveDataProvider does not have a method named "getValidators". 

la pregunta sería, debo configurar algún método getValidators?