如何从yii中的网格视图中的其他表中获取数据

时间:2015-05-15 10:06:00

标签: php yii

我有一个名为出席的模块,但其中的值来自其他具有某些条件的表格。那我怎么能得到其他表的id。我的代码如下:

模型是:

    if($type == 2)
    {
     $model = new Supplier(); 
    }
    elseif($type==3)
    {
     $model = new TruckingCompany();
    }
    elseif($type==4)
    {
     $model = new ServiceProvider();
    }
    elseif($type==5)
    {
     $model = new Landowner();
    }
    elseif($type==6)
    {
     $model = new Refiner();
    }
    elseif($type==8)
    {
     $model = new Worker();
    }
    elseif($type==9)
    {
     $model = new Trainer();
    }

现在我想更新此记录

    array(
        'header'=>'Action',         
        'class' => 'CButtonColumn',
        'template'=>'{update}',
        'updateButtonUrl'=>'Yii::app()->createUrl("attendance/update", array("id"=>$data->id))',
   );

现在我想得到更新记录的这些不同表的id,这些在所有表中都是不同的。我可以通过以下方式获得它:

 'updateButtonUrl'=> 'Yii::app()->createUrl("attendance/update", array("id"=>$data->supplier_master_id))';

但这不是一个正确的方法来定义所有表格,所以在这种情况下该做什么......任何想法......我是yii的新人。

2 个答案:

答案 0 :(得分:2)

为什么不与

这样的模型一起创建URL
if($type == 2)
    {
     $model = new Supplier(); 
     $updateUrl = 'Yii::app()->createUrl("attendance/update", array("id"=>$data->id))';
    }
    elseif($type==3)
    {
     $model = new TruckingCompany();
     $updateUrl = 'Yii::app()->createUrl("attendance/update", array("id"=>$data->supplier_master_id))';
    }

渲染时将其传递给视图

$this->render('view',array('updateUrl'=>$updateUrl));

然后最终在视图文件中使用它,如

array(
        'header'=>'Action',         
        'class' => 'CButtonColumn',
        'template'=>'{update}',
        'updateButtonUrl'=>$updateUrl,
   );

答案 1 :(得分:1)

除了let me see的回答。我会把它放在array形式:

$types = array(
    1 => array("modelName"=>"Supplier","url"=>'Yii::app()->createUrl("attendance/update", array("id"=>$data->id))'),
    2 => array("modelName"=>"TruckingCompany","url"=>'Yii::app()->createUrl("attendance/update", array("id"=>$data->supplier_master_id))'),
);

当然,你可以通过划分" url"来改善这一点。关键,例如:

"url"=>array(
     "route"=>"attendance/update",
     "params"=>'"id"=>$data->id',
 )

这样你可以像这样传递它:

if(array_key_exists($type,$types)){ //Checks if you've defined the type.   
    $this->render('view',array(
            'updateUrl'=>$types[$type]['url'],
            'model'=>new $types[$type]['modelName'](), //Creates your object.
         )
    );
    return; //just to be sure.
}
throw new CHTTPException(404, "Type not Found!");

您的观点将与改进的" url"键:

array(
    'header'=>'Action',         
    'class' => 'CButtonColumn',
    'template'=>'{update}',
    'updateButtonUrl'=>'Yii::app()->createUrl(' . $updateUrl['route'] . ', array(' . $updateUrl['params'] . '))',
);

这会稍微清除你的代码,并摆脱巨大的if语句/开关。

createUrl string仍然有点难看,所以如果您愿意,可以进一步改进。