r2178

r2178 更新了CActiveDataProvider,第一个参数可以传入model实例~

而去掉了之前的model直接指定的接口。

之前提出加入这个特性,是因为model需要用到behavior,而我这个behavior返回的是CActiveFinder实例~

按照现在的模式,我无法传入这个finder实例作为查询数据fetchData的根据~

怎么办?

顶上来~

续顶~

qiangqiang~

建议你的behavior不要返回CActiveFinder。在不久的将来,with()函数将返回CActiveRecord本身,而不是CActiveFinder。

你可以用behavior修改criteria的with属性来达到同样的目的。

嗯,我那个behavior就是返回 with(),

你说的方法我尝试一下~ :blink:

qiang, 我这里并非使用的behavior,而是一个CActiveRecord派生类

class I18nActiveRecord extends CActiveRecord {}

请教,如何搭配CActiveDataProvider使用?

以下是 I18nActiveRecord 的方法:


public function multilingual()

{

    $class=self::HAS_MANY;

    $options=array('index'=>$this->langField());

    $this->getMetaData()->relations['multilingual']=new $class('multilingual',$this->i18nClassName(),$this->langForeignKey(),$options);

    return $this->with('multilingual');

}



急切盼答复~~~

自己暂时做一个继承类,希望qiang可以优化一下~




<?php


class ActiveDataProvider extends CActiveDataProvider

{

    public $finder;


    protected function fetchData()

    {

        $criteria=clone $this->getCriteria();

        $baseCriteria=$this->model->getDbCriteria(false);

        if(($pagination=$this->getPagination())!==false)

        {

            if($baseCriteria!==null)

                $this->model->setDbCriteria(clone $baseCriteria);

            $pagination->setItemCount($this->getTotalItemCount());

            $pagination->applyLimit($criteria);

        }

        if(($sort=$this->getSort())!==false)

            $sort->applyOrder($criteria);


        $this->model->setDbCriteria($baseCriteria);

        if($this->finder) // add by jerry2801

            return $this->finder->findAll($criteria); // add by jerry2801

        return $this->model->findAll($criteria);

    }


    protected function calculateTotalItemCount()

    {

        if($this->finder) // add by jerry2801

            return $this->finder->count($this->getCriteria()); // add by jerry2801


        return $this->model->count($this->getCriteria());

    }

}




过来崇拜高手