Yii2 gridView Сортировать последнюю запись из отношения hasMany - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь использовать сортировку (в заголовке gridView) по записи 'id_state'last из отношения hasMany, и сортировка не применяется правильно.

таблиц:

формирование

идентификатор, имя

формирование_регистрация

идентификатор, id_formation, id_user

formation_registration_steps

id, id_formation_registration, id_state

Я пытаюсь получить эту последнюю строку состояния с отношением в yii2 следующим образом:

Модель формирования и регистрации:

public function getFormationRegistrationSteps()
    {
        return $this->hasMany(FormationRegistrationSteps::className(), ['id_formation_registration' => 'id']);
    }


    public function getFormationRegistrationStepsLast()
    {
        return $this->hasOne(FormationRegistrationSteps::className(), ['id_formation_registration' => 'id'])
            ->orderBy(['id' => SORT_DESC]);
    }

Модель формирования и регистрацииПоиск:

public function search($params)
    {
        $query = FormationRegistration::find();

        // add conditions that should always apply here
        $query->joinWith('formationRegistrationStepsLast lastStep');

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);

        $dataProvider->setSort([
            'attributes' => [
                'lastStep.id_state' => [
                    'asc' => ['lastStep.id_state' => SORT_ASC],
                    'desc' => ['lastStep.id_state' => SORT_DESC],
                ],
            ],
        ]);

        //(..)
    }

gridView

(..)
['attribute' => 'lastStep.id_state',
'format' => 'raw',
'value' => function ($model) {
 if(isset($model->formationRegistrationSteps->id_sate))
   return $model->formationRegistrationSteps->id_sate;
 }
],
(..)
...