使用Yii2中的相关模型上载多个文件并将其保存到DB

时间:2016-01-10 19:42:20

标签: php yii2

我通过制作项目来学习Yii2。

我有两个模型:Company和CompanyFile。我在一个表单中使用它们来创建公司,上传相关文件并将它们保存在关联的表格中。

问题是公司正在创建但没有上传文件并在关联表中创建行。

以下是公司财务总监:

public function actionCreate()
{
    $model = new Company();
    $file = new CompanyFile();

    if ($model->load(Yii::$app->request->post()) && $file->load(Yii::$app->request->post())) {
        $model->save();
        $attachments = UploadedFile::getInstances($file, 'attachment[]');
        foreach($attachments as $a){
            if ($a->upload()){
                $file->company_id = $model->id;
                $file->attachment = $a;
                $file->save();
            }       
            else {
                return $this->render('create', [
                    'model' => $model,
                    'file' => $file,
                ]);
            }
        }
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('create', [
            'model' => $model,
            'file' => $file,
        ]);
    }
}

这是CompanyFile模型的一部分:

public function upload()
{
    if ($this->validate()){
        $nameToSave = 'uploads/' . $this->attachment->baseName . '.' . $this->attachment->extension;
        $this->attachment->saveAs($nameToSave);
        return $nameToSave;
    }
    else {
        return false;           
    }
}

这里是views / company / _form.php:

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>

<?= $form->field($model, 'name')->textarea(['rows' => 1, 'style' => 'width: 400px;']) ?>

<?= $form->field($file, 'attachment[]')->fileInput(['multiple' => true]) ?>

<div class="form-group">
    <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>

<?php ActiveForm::end(); ?>

提交表单后,我被重定向到新创建的公司页面。没有上传文件。可能有什么不对?我无法找到有关在Yii2中将多个文件保存到另一个表的正确方法的任何信息。

1 个答案:

答案 0 :(得分:0)

需要

$attachments = UploadedFile::getInstances($file, 'attachment');

'附件'没有括号。