Пользовательский провайдер данных, использующий foreach yii2 - PullRequest
1 голос
/ 20 октября 2019

Я пытаюсь создать собственный dataProvider из идентификатора профессора (идентификатора учителя). На моем сайте размещена информация об учителях, курсах, оценках и т. Д. Для школ.

модель ER

Пользователь Alumno (ученик) увидит сетку своих преподавателей длякаждый курс, в котором он зарегистрирован, поэтому я пытаюсь вернуть эту информацию в dataProvider.

Сначала я спрашиваю, является ли пользователь выпускником.

Затем я ищу Asignaturas,Alumno зарегистрирован в.

С этой информацией я ищу профессоров, которые обучают этот Курсос, чтобы вернуть его идентификаторы как dataProvider, поэтому я сделал цикл foreach.

Что мне нужно, так этомассив идентификаторов Profesores, чтобы я мог отображать имена профессоров в виде сетки. Фактический код запрашивает последний идентификатор Profesor в 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,
    ]);
}

Любая помощь будет признательна.

1 Ответ

0 голосов
/ 21 октября 2019

Вы можете использовать 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])
]);
...