Using a field in CGridView from a secondary table

Good day, I’m new at using Yii and I’m having difficulty with one situation. I’m developing a new module for an existing site of a academy with several franchisees. This module entails the upload of files. When we upload a file we tell to which franchisees the file belongs. The file may belong to more than one franchisee and I have an option that it belongs to everyone. I attached the table structure.

This is my model:




class RepositorioFicheiros extends CActiveRecord

{

  public $academiasId;


  public static function model($className=__CLASS__)

  {

    return parent::model($className);

  }


  public function tableName()

  {

    return 'repositorioficheiros';

  }


  public function rules()

  {

    return array(

        array('titulo, descricao, data_criacao, academiasId', 'required'),

        array('data_criacao, academiasId', 'safe'),

        array('ficheiro', 'file', 'types' => '7z, bmp, doc, docx, dwf, dwg, dxf, eml, gif, jpeg, jpg, msg, pdf, png, pps, ppsx, ppt, pptx, rar, tif, tiff, txt, xls, xlsx, zip', 'maxSize' => '15728640', 'allowEmpty' => true),

        array('ficheiro', 'required', 'on' => 'create'),

        array('titulo, ficheiro, ficheiro_original, descricao', 'safe', 'on' => 'search')

    );

  }


  public function relations()

  {

    return array(

        'repositorioficheirosacademias' => array(self::HAS_MANY, 'RepositorioFicheirosAcademias', 'repositorioficheirosId')

    );

  }


  public function attributeLabels()

  {

    return array(

      'id' => Yii::t('main', 'id'),

      'titulo' => Yii::t('main', 'title'),

      'descricao' => Yii::t('main', 'description'),

      'data_criacao' => Yii::t('main', 'creation_date'),

      'ficheiro' => Yii::t('main', 'file'),

      'ficheiro_original' => Yii::t('main', 'file'),

      'academiasId' => Yii::t('main', 'academiasRep')

    );

  }


  public function search()

  {

    if(Yii::app()->user->checkAccess('administrator') || Yii::app()->user->checkAccess('superadmin'))

    {

      $strSearch = array('with' => array('repositorioficheirosacademias' => array()));

    }

    else

    {

      $userTmp = Users::model()->find('id = :userid AND block = :blockuser', array(':userid' => Yii::app()->user->id, ':blockuser' => 0));

      $condition = 'repositorioficheirosacademias.academiasId = :idacademia OR repositorioficheirosacademias.academiasId = 0';

      $params     = array(':idacademia' => $userTmp->academiasId);

      $strSearch = array('with' => array('repositorioficheirosacademias' => array('select' => 'repositorioficheirosacademias.id, repositorioficheirosacademias.academiasId, repositorioficheirosacademias.repositorioficheirosId',

                                                                                  'condition' => $condition,

                                                                                  'params' => $params)),

                                                                                  'together' => true);

    }


    $pageSize = Yii::app()->params['defaultPageSize'];

    $criteria = new CDbCriteria($strSearch);

    $criteria->compare('LOWER(data_criacao)', $this->data_criacao, true);

    $criteria->compare('LOWER(titulo)', $this->titulo, true);

    $criteria->compare('LOWER(descricao)', $this->descricao, true);

    $criteria->compare('LOWER(ficheiro_original)', $this->ficheiro_original, true);

    $sort = new CSort;

    $sort->attributes = array('data_criacao',

                              'titulo',

                              'descricao',

                              'ficheiro_original');

    $sort->defaultOrder = array('data_criacao' => true,

                                'titulo' => true,

                                'descricao' => true,

                                'ficheiro_original' => true);


    return new CActiveDataProvider('RepositorioFicheiros', array('criteria' => $criteria,

                                                                 'sort' => $sort,

                                                                 'pagination' => array('pageSize' => $pageSize)));

  }


  

  public static function getAcademias($id)

  {

    $academias = array();

  

    $resultado = "";

    $todos = false;

  

    foreach (RepositorioFicheirosAcademias::model()->findAll("repositorioficheirosId = :repositorioficheirosId", array(":repositorioficheirosId" => $id)) as $academia) {

      if ($academia->academiasId == 0)

      {

        $todos = true;

      }

      else

      {

        $academias[] = Academias::model()->find("id = :id", array(":id" => $academia->academiasId))->nome;

      }

    }

  

    sort($academias);

  

    if ($todos)

    {

      $resultado = "Todos";

    }

    else

    {

      $resultado = implode(" ; ", $academias);

    }

  

  

    return $resultado;

  }

}



This the widget call I make in the view.




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

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

                                                  'filter' => $model,

                                                  'emptyText' => Yii::t('main', 'no results found'),

                                                  'summaryText' => ' ',

                                                  'columns' => array(array('name' => 'data_criacao',

                                                                           'htmlOptions' => array('style' => 'text-align:center; width: 105px;')),

                                                                     array('name' => 'titulo',

                                                                           'type' => 'html',

                                                                           'value' => ((Yii::app()->user->checkAccess('administrator') || Yii::app()->user->checkAccess('superadmin')) ? '"<a href=\'update/id/" . $data->id . "\'>" . $data->titulo . "</a>";' : '$data->titulo')),

                                                                     array('name' => 'descricao'),

                                                                     array('name' => 'ficheiro_original',

                                                                           'type' => 'html',

                                                                           'value' => '"<a href=\'download/" . $data->id . "\' target=\'_blank\'>" . $data->ficheiro_original . "</a>";'),

                                                                     array('header' => Yii::t('main', 'academiasRepAdmin'),

                                                                           'type' => 'raw',

                                                                           'visible' => Yii::app()->user->checkAccess('administrator') || Yii::app()->user->checkAccess('superadmin'),

                                                                           'value'=> 'RepositorioFicheiros::getAcademias($data->id)'),

                                                                     array('class' => 'CButtonColumn',

                                                                           'template' => ((Yii::app()->user->checkAccess('administrator') || Yii::app()->user->checkAccess('superadmin')) ? '{update}&nbsp;&nbsp;{delete}' : ''),

                                                                           'updateButtonImageUrl' => '../images/edit.png',

                                                                           'deleteButtonImageUrl' => '../images/delete.png',

                                                                           'deleteConfirmation' => Yii::t('errorWarn', 'sure_delete_item')))));



In the fifth column of the grid I have the name of all franchisees to whom the file belongs that is built using the function getAcademias that is located on the model. The problem is that I don’t know how to use the filters to search in that field.

Can anyone help me?

Thanks!