r2178 更新了CActiveDataProvider,第一个参数可以传入model实例~
而去掉了之前的model直接指定的接口。
之前提出加入这个特性,是因为model需要用到behavior,而我这个behavior返回的是CActiveFinder实例~
按照现在的模式,我无法传入这个finder实例作为查询数据fetchData的根据~
怎么办?
r2178 更新了CActiveDataProvider,第一个参数可以传入model实例~
而去掉了之前的model直接指定的接口。
之前提出加入这个特性,是因为model需要用到behavior,而我这个behavior返回的是CActiveFinder实例~
按照现在的模式,我无法传入这个finder实例作为查询数据fetchData的根据~
怎么办?
顶上来~
续顶~
qiangqiang~
建议你的behavior不要返回CActiveFinder。在不久的将来,with()函数将返回CActiveRecord本身,而不是CActiveFinder。
你可以用behavior修改criteria的with属性来达到同样的目的。
嗯,我那个behavior就是返回 with(),
你说的方法我尝试一下~
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());
}
}
过来崇拜高手