我有一个名为出席的模块,但其中的值来自其他具有某些条件的表格。那我怎么能得到其他表的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的新人。
答案 0 :(得分:2)
为什么不与
这样的模型一起创建URLif($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
仍然有点难看,所以如果您愿意,可以进一步改进。