从数组中获取数据并在Yii Php中分配它们

时间:2016-04-26 06:15:07

标签: php arrays loops yii

首先我是yii框架的新手..目前我想写一个函数来自动将短名单提交用户分配给评估者,以便他们可以标记他们的提交资料。

例如

Total submission users: 20
Total evaluators: 11
Evaluator per submission: 3

我想获得总提交用户数组,以及总评估者......然后我想自动为他们分配提交内容,以下是我想要的内容。

submission 1
    Assigned to evaluator 1, evaluator 2, evaluator 3.

submission 2
    Assigned to evaluator 4, evaluator 5, evaluator 6.

submission 3
    Assigned to evaluator 7, evaluator 8, evaluator 9.

submission 4
    Assigned to evaluator 10, evaluator 11, evaluator 1.

submission 5
    Assigned to evaluator 2, evaluator 3, evaluator 4.
.
.

.
submission 20
    Assigned to evaluator 3, evaluator 4, evaluator 5.

依此类推,直到所有提交的内容都被自动分配。目前我通过转到第一个评估者个人资料手动完成所有操作,然后为他分配sumission,然后转到第二个评估者,然后将提交分配给他,这将需要很多时间,如果我有超过50个评估者和200多个提交,我想要自动化。

我是yii的新手,所以不确定如何做到这一切......这是我的新功能代码..

 public function actionAutoAssign(){
    $evaluator_list = ApplicantsController::model()->findAllByAttributes(array('user_type'=>'evaluator'));
    $applicants_list = ApplicantsController::model()->findAllByAttributes(array('appl_status'=>'Short listed'));
    $award_id = Awards::model()->actionCurrentAward();
    $status = '';

    $model = new Evaluation();
    $model->setScenario('evalassign');
    foreach($applicants_list as $key=>$val){
        $model->app_id = $val;
        $model->eval_id = $evaluator_list;
        $model->assign_date = date('Y-m-d H:i:s');
        $model->award_id = $award_id;
        if($model->validate()){
            $model2 = null;

            $model2 = HmcApplicants::model()->find('id=:applId',array('applId'=>$val));
            $model2->appl_status = 'Under Evaluation Now';
            $model2->update($val);

            if($model->save(FALSE)){
                $status = 'ok';
            }
        }

    }
}

我不确定如何在yii中执行此操作,即时尝试但与如何使用上面执行的数组混淆,以及如何自动将每个提交分配给3个评估者。

1 个答案:

答案 0 :(得分:0)

findAllByAttributes的结果是相关模型的集合,您应该通过迭代引用这些模型 对于$ applicant_list你做得对,然后你需要相当于$ evaluater_list的东西(再次使用foreach或索引)

假设$ evaluator_list包含名为id的字段中的eval_id,你可以随机执行,例如:with array_rand这样

    public function actionAutoAssign(){
        $evaluator_list = ApplicantsController::model()->findAllByAttributes(array('user_type'=>'evaluator'));
        $applicants_list = ApplicantsController::model()->findAllByAttributes(array('appl_status'=>'Short listed'));
        $award_id = Awards::model()->actionCurrentAward();
        $status = '';

        $model = new Evaluation();
        $model->setScenario('evalassign');
        foreach($applicants_list as $key=>$val){
            $model->app_id = $val;
            for ($cnt = 0; $cnt<2; $cnt++){     
                $model->eval_id = array_rand($evaluator_list)->id ;
            }
            $model->assign_date = date('Y-m-d H:i:s');
            $model->award_id = $award_id;
            if($model->validate()){
                $model2 = null;

                $model2 = HmcApplicants::model()->find('id=:applId',array('applId'=>$val));
                $model2->appl_status = 'Under Evaluation Now';
                $model2->update($val);

                if($model->save(FALSE)){
                    $status = 'ok';
                }
            }

        }
    }