所以,我对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,
));
}
因此,在我更改了dataProvider后,CgridView Filter停止了工作
我缺少什么?我知道在Proposta::model()->search()
函数中,有一组标准比较,例如$criteria->compare('id',$this->id)
。
解决此问题的最佳方法是什么?改变我的过滤器?在listPropostas()
函数添加比较?
提前感谢!
干杯
答案 0 :(得分:1)
我不确定,您必须对其进行测试,但我认为您正在寻找$model->listPropostas()
而不是User::model()->listPropostas()
,其中应在您的Proposta模型中定义listPropostas()而不是您的用户模型。
这样的事情:
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
中会包含数据而新初始化的模型不会