Cómo mostrar datos de tablas relacionadas en CGridview en yii

Estoy tratando de mostrar los resultados usando CGridView. tengo dos tablas Usuarios y productos . ExiProducts es la tabla que mantiene la relación de muchos a muchos entre entonces y permite que el nombre de la relación sea ‘myrelation’

public function actionSearch() { if(isset($_GET['searchButton'] && $_GET['searchType']==='products') { $searchString= trim(strip_tags($_GET['searchValue'])); $model=new Products; $criteria->compare('productName', $searchString, TRUE, 'AND', TRUE); $criteria->compare('productType',$searchString,true,'OR',TRUE); $criteria->compare('productBrand',$searchString,true,'OR',TRUE); $criteria->compare('description',$searchString,true,'OR',true); $dataProviderObj=new CActiveDataProvider($model, array( 'criteria'=>$criteria, )); } $this->render('search',array( 'dataProviderObj'=>$dataProviderObj, 'model'=>$model, )); } 

Este es mi view.php

  $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'users-grid', 'dataProvider'=>$dataProviderObj, 'columns'=>array( 'productName', 'productType', 'productBrand', 'description', 'I WANT THE NAME OF EVERY USER THAT CREATED THIS PRODUCT HERE WHICH IS IN THE USERS TABLE ' ), )); 

¿Puede alguien decirme cómo puedo obtener el nombre de los usuarios que crean esos productos allí? columnas en la tabla de usuarios son

 UserId, Username 

y ExiProducts son

 UserId, ProductId 

Actualicé mi código

 public function gridCreateUser($data,$row) { $myproducts=array(); $user = $data->userId; $records= Users::model()->with('usersproducts')->findAll('userId=:userId',array(':userId'=>$user)); foreach($records as $record) { foreach($record->usersproducts as $productis) { $myproducts[]=$productis->productName; } } return $myproducts; } 

vista de la vista de cuadrícula

 $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'users-grid', 'dataProvider'=>$dataProviderObj, 'columns'=>array( 'productName', 'productType', 'productBrand', 'description', array( 'name' => '' 'value' => array($this,'gridCreateduser') ) ), )); 

Este es tu value => array($this,'gridCreatedUser') vista de cuadrícula value => array($this,'gridCreatedUser') esto significa que la vista de cuadrícula buscará una función en su controlador para una función gridCreateUser ()

Ahora en el controlador

 public function gridCreateUser($data,$row){ $user = $data->; //do your stuff for finding the username or name with $user //for eg. $detail = User::model()->findByPk($user); // make sure what ever model you are calling is accessible from this controller other wise you have to import the model on top of the controller above class of the controller. return $detail->username; } 

No, esto enviará el valor deseado de ese nombre coulmn a la vista de cuadrícula.

O puede usarlo de manera simple definiendo la relación entre los modelos dentro del modelo cuya vista de cuadrícula está creando

 public function relations(){ return array( 'users' => array(self::HAS_MANY, 'Users', ''), ); } 

Entonces puede acceder directamente a él en su vista de cuadrícula

 $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'users-grid', 'dataProvider'=>$dataProviderObj, 'columns'=>array( 'productName', 'productType', 'productBrand', 'description', array( 'name' => '' 'value' => $data->users->username ) ), )); 

Es fácil .

Todo lo que tienes que hacer es escribir una relación en el archivo de modelo ExiProducts

  public function relations() { // NOTE: you may need to adjust the relation name and the related // class name for the relations automatically generated below. return array( 'user' => array(self::BELONGS_TO, 'users', 'UserId'), ); } 

Y puede usar esto en la vista de cuadrícula como

 $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'users-grid', 'dataProvider'=>$dataProviderObj, 'columns'=>array( 'productName', 'productType', 'productBrand', array( 'header'=>'User Name', 'value'=>'CHtml::encode($data->user->Username)',//This will use the relationship and get all the details of the paticular user from users table ), ), )); 

Agregue la relación en su tabla de usuarios editando las relaciones () en su página de modelo como se muestra

 public function relations() { // NOTE: you may need to adjust the relation name and the related // class name for the relations automatically generated below. return array( 'user' => array(self::BELONGS_TO, 'users', 'UserId'), ); } 

En su view.php,

 $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'users-grid', 'dataProvider'=>$dataProviderObj, 'columns'=>array( 'productName', 'productType', 'productBrand', 'description', array( 'name'=>'User Name', 'value'=>$model->->user->Username, ), ), )); 
    Intereting Posts