Как отображать данные из связанных таблиц в CGridview в yii

Я пытаюсь показать результаты с помощью CGridView. У меня есть две таблицы пользователей и продуктов . ExiProducts – это таблица, в которой поддерживается много-много отношений между ними, и пусть имя отношения – это «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, )); } 

Это мой 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 ' ), )); 

Может кто-нибудь, пожалуйста, скажите мне, как я могу получить имя пользователей, создающих эти продукты там. столбцы в таблице пользователей

 UserId, Username 

и ExiProducts

 UserId, ProductId 

Обновлен мой код

 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; } 

    вид сетки

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

    Это value => array($this,'gridCreatedUser') grid view value => array($this,'gridCreatedUser') это означает, что вид сетки будет искать функцию в своем контроллере для функции gridCreateUser ()

    Теперь в контроллере

     public function gridCreateUser($data,$row){ $user = $data-><colmn_name>; //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; } 

    Нет, это приведет к отправке желаемого значения этого имени звонка в сетку.

    Или вы можете использовать простой способ, определяя соотношение между моделями внутри модели, gridview которых вы создаете

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

    Затем вы можете получить к нему доступ в виде сетки

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

    Это просто .

    Все, что вам нужно сделать, это написать отношение в файле модели 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'), ); } 

    И вы можете использовать это в режиме Grid как

     $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 ), ), )); 

    Добавьте связь в свою таблицу пользователей, отредактировав отношения () на странице модели, как показано

     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'), ); } 

    В вашем 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, ), ), ));