2014-01-08 38 views
0

所以,我對Yii有點新鮮。我有一個CGridView看起來像:Yii - CgridView過濾器在更改數據提供器後停止工作

<?php $this->widget('zii.widgets.grid.CGridView', array(
      'id'=>'proposta-grid', 
      'dataProvider'=>Yii::app()->session['user']->listPropostas(), 
      'filter'=>$model, 
        ... 
        ... 

我改變了dataProvider$model->search()User::model()->listPropostas()。 dataProvider和過濾器由不同的模型提供。

這是listPropostas方法,工作正常的代碼:

public function listPropostas() 
{ 
    $criteria = new CDbCriteria; 
    $arrFiliais = array(); 
    $arrPropostas = array(); 

    $arrGrupos = $this->gruposId(); 
    foreach ($arrGrupos as $grupo) { 
     $objGrupo = GrupoDeAnalistas::model()->findByPk($grupo['id']); 
     foreach ($objGrupo->listFiliais() as $arr) { 
      if (!in_array($arr['id'], $arrFiliais)) { 
       array_push($arrFiliais, $arr['id']); 
      } 
     } 
    } 

    foreach ($arrFiliais as $arrFilial) { 
     $objFilial = Filial::model()->findByPk($arrFilial['id']); 
     foreach ($objFilial->listPropostas($this) as $propId) { 
      if (!in_array($propId['id'], $arrPropostas)) { 
       array_push($arrPropostas, $propId['id']); 
      } 
     } 
    } 

    $proposta = new Proposta; 
    $criteria->addInCondition("id", $arrPropostas); 
    return new CActiveDataProvider($proposta, array(
     'criteria' => $criteria, 
    )); 
} 

於是,我改變了數據提供程序之後CgridView過濾器停止工作

我缺少什麼?我知道在Proposta::model()->search()函數中,有幾組標準比較,如$criteria->compare('id',$this->id)

解決此問題的最佳方法是什麼?更改我的過濾器?在listPropostas()函數上添加比較?

預先讚賞!

乾杯

回答

1

林不知道,你就必須對其進行測試,但我認爲你正在尋找替代$model->listPropostas()其中User::model()->listPropostas() listPropostas()應該在你的Proposta模型,而不是你的用戶模型來定義。

事情是這樣的:

public function listPropostas() 
{ 
    $criteria = new CDbCriteria; 
    $arrFiliais = array(); 
    $arrPropostas = array(); 

    $arrGrupos = Yii::app()->session['user']->gruposId(); 
    foreach ($arrGrupos as $grupo) { 
     $objGrupo = GrupoDeAnalistas::model()->findByPk($grupo['id']); 
     foreach ($objGrupo->listFiliais() as $arr) { 
      if (!in_array($arr['id'], $arrFiliais)) { 
       array_push($arrFiliais, $arr['id']); 
      } 
     } 
    } 

    foreach ($arrFiliais as $arrFilial) { 
     $objFilial = Filial::model()->findByPk($arrFilial['id']); 
     foreach ($objFilial->listPropostas($this) as $propId) { 
      if (!in_array($propId['id'], $arrPropostas)) { 
       array_push($arrPropostas, $propId['id']); 
      } 
     } 
    } 

    $criteria->addInCondition("id", $arrPropostas); 
    return new CActiveDataProvider($this, array(
     'criteria' => $criteria, 
    )); 
} 

注意的$ this關鍵字在CActiveDataProvider是相當重要的,因爲$this將有它的數據,而一個新初始化模式將沒有

+0

感謝您的幫助!我會嘗試的! –