图片上传控制器:
if (isset($_POST['Tblvehicleimage'])) {
$company = Tbluser::model()->findByAttributes(array('user_code' => Yii::app()->user->ID));
$images = CUploadedFile::getInstancesByName('image');
if (isset($images) && count($images) > 0) {
$line = 0;
foreach ($images as $image => $pic) {
$line = $line + 1;
if ($pic->saveAs(Yii::getPathOfAlias('webroot') . '/images/' . $pic->name, 0777)) {
$model = new Tblvehicleimage;
$model->attributes = $_POST['Tblvehicleimage'];
$model->company_code = $company->company_code;
$model->line_no = $line;
$model->image = $pic->name;
$model->save();
}
}
$this->redirect(array('view', 'company_code' => $model->company_code, 'serial_no' => $model->serial_no, 'line_no' => 1));
}
$this->render('upload', array('model' => $model));
}
形式:
<div class="row">
<?php echo $form->labelEx($model,'image'); ?>
<?php
$this->widget('CMultiFileUpload', array(
'model'=>$model,
'name'=>'image',
'attribute'=>'image',
'accept'=>'jpg|gif|png',
));
?>
这只保存第一个文件,行号为1.我想用第2行保存第二个图像,依此类推。任何人都可以解释控制器中缺少的东西吗?
答案 0 :(得分:2)
你需要在你的代码中再添加两行,这些行可能对你有所帮助......每次循环移动到下一次迭代时你需要告诉它一条新记录,所以为它添加这一行
$model->isNewRecord=TRUE;
然后如果表中有一个自动递增的主键,则需要将其设置为null。假设ID是表格中的主键,那么你需要这样做
$model->ID=NULL;
所以你的最终代码会变成这样的
$model->company_code=$company->company_code;
$model->line_no= $line;
$model->image = $pic->name;
$model->ID=NULL;
$model->isNewRecord=TRUE;
$model->save();
注意:我认为 line_no 是您表格中的主键。所以如果你的表中是自动增量,你不需要每次都设置它的值。只需将其设置为空。
答案 1 :(得分:1)
您的问题是您正在为迭代重复使用相同的变量$ model。存储在$ model中的值不会被重置,因此,正如@ let-me-see所描述的那样,一旦保存了记录,它就不再是新记录,因此在下一次迭代中它将不会被保存。一个简单的方法是在迭代结束之前完成使用变量$ model后简单unset
。您的迭代循环变为
if ($pic->saveAs(Yii::getPathOfAlias('webroot') . '/images/' . $pic->name, 0777)) {
$model = new Tblvehicleimage;
$model->attributes = $_POST['Tblvehicleimage'];
$model->company_code = $company->company_code;
$model->line_no = $line;
$model->image = $pic->name;
$model->save();
unset($model);//Destroys $model, so your next use will start from a
//fresh, empty variable.
}