【问题标题】:Yii - CgridView Filter stopped working after changing the dataproviderYii - CgridView 过滤器在更改数据提供程序后停止工作
【发布时间】:2014-01-08 14:11:48
【问题描述】:

所以,我对 Yii 有点陌生。我有一个 CGridView,它看起来像:

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

我将dataProvider$model-&gt;search() 更改为User::model()-&gt;listPropostas()。 dataProvider 和 filter 由不同的模型提供。

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

所以,在我更改了 dataProvider 后,CgridView 过滤器停止工作

我错过了什么?我知道在Proposta::model()-&gt;search() 函数中,有一组标准比较,例如$criteria-&gt;compare('id',$this-&gt;id)

解决此问题的最佳方法是什么?改变我的过滤器?在listPropostas()函数上添加比较?

提前感谢!

干杯

【问题讨论】:

    标签: php yii filter cgridview


    【解决方案1】:

    我不确定,您必须对其进行测试,但我认为您正在寻找 $model-&gt;listPropostas() 而不是 User::model()-&gt;listPropostas() 其中 listPropostas() 应该在您的 Proposta 模型而不是您的 User 模型中定义。

    类似这样的:

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

    注意 CActiveDataProvider 中的 $this 关键字相当重要,因为$this 会在其中包含数据,而新初始化的模型则不会

    【讨论】:

    • 感谢您的帮助!我试试看!
    猜你喜欢
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多