使用 foreach yii2 的自定义数据提供程序

Custom Data Provider using foreach yii2

我正在尝试创建一个由教授 ID(教师 ID)组成的自定义 dataProvider。我的网站提供有关学校教师、课程、成绩等的信息。

ER model

用户 Alumno(学生)将看到他注册的每门课程的教授的网格视图,因此,我正在尝试 return dataProvider 中的信息。

首先,我问用户是否是校友。

然后我搜索 Alumno 注册的 Asignaturas。

根据这些信息,我搜索教授 Cursos 的教授,return 它的 id 作为数据提供者,所以我做了一个 foreach 循环。

我需要的是一组教授 ID,这样我就可以在网格视图中显示教授的名字。实际代码是将最后一个 Profesor id 查询到 dataProvider 中。

public function actionIndex()
{        
    $this->layout = 'main';
    $searchModel = new ProfesorSearch();

    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    if(User::isUserAlumno(Yii::$app->user->identity->id)){
        $alumno = Alumno::find()->where(['id_usuario' => Yii::$app->user->identity->id])->one();
        $asignaturas = Asignatura::find()->where(['id_curso' => $alumno->id_curso])->all();
        foreach ($asignaturas as $asignatura){
            $dataProvider = new ActiveDataProvider([
            'query' => Profesor::find()->where(['id' => $asignatura->id_profesor])
            ]);
        }
    }

    return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
    ]);
}

如有任何帮助,我们将不胜感激。

您可以使用 column() 从查询中获取所有 id_profesor

$profesorIds = Asignatura::find()->select('id_profesor')->where(['id_curso' => $alumno->id_curso])->column();

$dataProvider = new ActiveDataProvider([
   'query' => Profesor::find()->where(['id' => $profesorIds])
]);