Yii2 - 更新复杂表格

时间:2018-04-19 13:26:19

标签: yii2

我使用两个模型类创建了一个复杂表单:

  1. 课程
  2. CourseStructure

    public function actionCreate()
    {
    $model = new Course();
    $request = Yii::$app->request;
    
    if ($model->load(Yii::$app->request->post()) && Yii::$app->request->isAjax) {
     //The course was created successfully, so we can use its data to make course structure
    \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
            return ActiveForm::validate($model);
    }
    if ($model->load(Yii::$app->request->post())) {  
    
    $model->attributes = $_POST['Course'];
    $model->course_start_date = date('Y-m-d', strtotime($_POST['Course']['course_start_date']));
    $model->created_at = new \yii\db\Expression('NOW()');
    
    }          
        $model->save(false);   
    
        if($model->save(false))
        //The course was created successfully, so we can use its data to make course structure
        {
          // check if topic format 
            if($model->course_format == Course::TYPE_TOPIC) 
            {      
                for( $i = 1; $i <= $model->course_format_no; $i++ )
                {
                    $structure = new CourseStructure();
                    $structure->course_id = $model->course_id;                  
                    $structure->structure_name = $model->course_format . $i;
                    $structure->structure_id = $i;
    
                    // fill in other course structure data here
                    $structure->save();
                }
            }
        }                      
        else
            return $this->render('create', ['model' => $model,]);
    
    
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
    }
    
  3. 从CourseControllers中,如果course_format = TYPE_TOPIC,则基于所选的course_format_no, 在course_structure表(CourseStructure)中添加了一些行。例如,如果course_format_no = 3,它会在course_structure表中创建另外三行。

                    if($model->course_format == Course::TYPE_TOPIC) 
                {      
                    for( $i = 1; $i <= $model->course_format_no; $i++ )
                    {
                      $structure = new CourseStructure();
                        $structure->course_id = $model->course_id;                  
                        $structure->structure_name = $model->course_format . $i;
                        $structure->structure_id = $i;
    
                        // fill in other course structure data here
                        $structure->save();
                    }
                }
    

    在CourseController中的CourseCreate Action中可以正常工作。

    现在我如何为CourseUpdate Action执行此操作,以便根据更新中添加的course_format_no减少行数或在course_structure表中增加它。

    course_structure

    这就是我所拥有的:

        public function actionUpdate($id)
    {
        $model = $this->findModel($id);
        $old_model = $this->findModel($id);
    
    if ($model->load(Yii::$app->request->post()) && Yii::$app->request->isAjax) {
                \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
                return ActiveForm::validate($model);
        }
        if ($model->load(Yii::$app->request->post())) {
    
        $model->attributes = $_POST['Course'];
        $model->course_start_date = Yii::$app->dateformatter->getDateFormat($_POST['Course']['course_start_date']);       
    
        $model->updated_by = Yii::$app->getid->getId();
        $model->updated_at = new \yii\db\Expression('NOW()');
        if($model->save(false))
            return $this->redirect(['view', 'id' => $model->course_id]);
    
        } else {
            return $this->render('update', [
                'model' => $model,
            ]);
        }
    }
    

    课程结构模型

    class CourseStructure extends \yii\db\ActiveRecord
    {
    public static function tableName()
    {
        return 'course_structure';
    }
    
    public function rules()
    {
        return [
            [['course_id', 'structure_id', 'summary_format', 'created_by', 'updated_by'], 'integer'],
            [['structure_summary'], 'string'],
            [['created_at', 'updated_at'], 'safe'],
            [['structure_name'], 'string', 'max' => 200],
        ];
    }
    
    public function attributeLabels()
    {
        return [
            'course_structure_id' => 'Course Structure ID',
            'course_id' => 'Course ID',
            'structure_id' => 'Structure ID',
            'structure_name' => 'Structure Name',
            'structure_summary' => 'Structure Summary',
            'summary_format' => 'Summary Format',
            'created_at' => 'Created At',
            'created_by' => 'Created By',
            'updated_at' => 'Updated At',
            'updated_by' => 'Updated By',
        ];
    }
    
    public function getCourses()
    {
        return $this->hasOne(Course::className(), ['course_id' => 'course_id']);
    }   
    
    public static function getAllCourseStructure()
    {
        $dataTmp = self::find()->orderBy('structure_name')->all();
        $result = yii\helpers\ArrayHelper::map($dataTmp, 'course_structure_id', 'structure_name');
        return $result;
    }     
    }
    

    课程模型

    class Course extends \yii\db\ActiveRecord
    {
    const TYPE_WEEKLY= 'Weekly';
    const TYPE_TOPIC='Topic';  
    
    public $coursefile;
    
    public static function tableName()
    {
        return 'course';
    }
    
    public function rules()
    {
        return [
            [['course_category_id', 'course_format_no', 'show_grade', 'created_by', 'updated_by'], 'integer'],
            [['course_code', 'course_name', 'course_format', 'course_format_no'], 'required', 'message' => ''],
            [['course_summary'], 'string'],
            [['course_start_date', 'created_at', 'updated_at', 'course_file_path'], 'safe'],
            [['course_code'], 'string', 'max' => 100],
            [['course_name'], 'string', 'max' => 255],
            [['course_num', 'course_format'], 'string', 'max' => 20],
            [['course_code'], 'unique'],
            [['coursefile'], 'safe'],
    
            [['course_name', 'course_category_id'], 'unique', 'targetAttribute' => ['course_name', 'course_category_id'], 'message' => Yii::t('app', 'The combination of Course Name and Course Category has already been taken.')],
            [['coursefile'], 'file', 'extensions' => 'jpg, jpeg, gif, png, pdf, txt, jpeg, xls, xlsx, doc, docx', 'maxFiles' => 4],
            [['coursefile'], 'file', 'maxSize'=>'10000000'],
            [['course_file_path', 'course_file_name'], 'string', 'max' => 255],        
        ];
    }
    
    public function attributeLabels()
    {
        return [
            'course_id' => 'Course ID',
            'course_category_id' => 'Course Category',
            'course_code' => 'Course Short Name',
            'course_name' => 'Course Full Name',
            'course_num' => 'Course ID Number',
            'course_summary' => 'Course Summary',
            'course_start_date' => 'Course Start Date',
            'course_format' => 'Course Format',
            'course_format_no' => 'No.of Sections',
            'course_file_path' => Yii::t('app', 'Pathname'),          //'Course File',
            'course_file_name' => Yii::t('app', 'Filename'),
            'show_grade' => 'Show Grade',
            'created_at' => 'Created At',
            'created_by' => 'Created By',
            'updated_at' => 'Updated At',
            'updated_by' => 'Updated By',
        ];
    }
    
    public function getCourseCategory()
    {
        return $this->hasOne(CourseCategories::className(), ['course_category_id' => 'course_category_id']);
    }   
    
    public static function getAllCourse()
    {
        $dataTmp = self::find()->orderBy('course_name')->all();
        $result = yii\helpers\ArrayHelper::map($dataTmp, 'course_id', 'course_name');
        return $result;
    }  
    
    public static function getCourseFormat()
    {
    return[
    Yii::t('app', self::TYPE_TOPIC) => Yii::t('app', 'Topic'),
    Yii::t('app', self::TYPE_WEEKLY) => Yii::t('app', 'Weekly'),
    ];
    }
    
    }
    

    如何在ActionUpdate中编写代码来更新CourseStructure。

0 个答案:

没有答案