У меня есть таблица User, которая объединена с таблицей auth_assignment, чтобы получить роль пользователя и отобразить ее в сетке пользователя. Атрибут роли отображается в представлении сетки, но когда я нажимаю кнопку действия, редактировать, форма загружается, а атрибут роли пуст.

Я пытаюсь обновить поле из объединенной таблицы непосредственно в действии обновления пользователя. Является ли это возможным?

Моя модель:

class User extends ActiveRecord implements \yii\web\IdentityInterface
{
  public $perfil;

public function attributeLabels()
    {
        return [
            'permissions' => 'Permissões',
            'first_name' => 'Primeiro Nome',
            'last_name' => 'Último Nome',
            'perfil' => 'Role',
        ];
    }

Мой index.php

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        // ['class' => 'yii\grid\SerialColumn'],

        'id',
        'first_name',
        'last_name',
        'username',
        [
            'attribute'=>'perfil',
            'value'=>'authAssignment.item_name'
        ],

Мой _form.php:

<?php $form = ActiveForm::begin(); ?>

<?= $form->field($model, 'id')->textInput() ?>

<?= $form->field($model, 'first_name')->textInput(['maxlength' => true]) ?>

<?= $form->field($model, 'last_name')->textInput(['maxlength' => true]) ?>

<?= $form->field($model, 'username')->textInput(['maxlength' => true]) ?>

<?= $form->field($model, 'perfil')->textInput(['maxlength' => true]) ?>


<div class="form-group">
    <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>

<?php ActiveForm::end(); ?>

Мое присоединение к модели пользователя и доступ к ней в модели поиска:

public function getAuthAssignment() {
    return $this->hasOne(AuthAssignment::className(), ['user_id' => 'id']);
}

if (Yii::$app->controller->id == 'user' && Yii::$app->controller->action->id == 'index') {
            $query->joinWith('authAssignment');
 }

Я хочу иметь возможность обновлять атрибут роли вместе с другими полями, когда я нажимаю кнопку редактирования столбца действия. Я могу отобразить столбец роли (perfil) в gridview, но когда я нажимаю кнопку обновления, поле становится пустым.

update screen

Как я могу обновить поле из объединенной таблицы?

-2
Rui Sousa 1 Мар 2018 в 16:12

1 ответ

Лучший ответ

Чтобы обновить поле объединенной таблицы, я создал экземпляр таблицы auth_assignment в функции обновления, и при нажатии кнопки сохранения я присваиваю опубликованное значение полю item_name. Вот моя функция обновления:

public function actionUpdate($id)
{
    $model = $this->findModel($id);
    // display joined table field in the update form
    $model->perfil = $model->authAssignment['item_name'];

    if ($model->load(Yii::$app->request->post()) && $model->validate()) {
        // get the auth_assignment table
        $authAssig = AuthAssignment::find()->where(['user_id' => $id])->one();

        // update field using postedform value
        $authAssig->item_name = Yii::$app->request->post()['User']['perfil'];

        if ($model->save() && $authAssig->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        }
    } else {
        return $this->render('update', [
            'model' => $model,
        ]);
    }
}
0
Rui Sousa 5 Мар 2018 в 12:55