从联接表更新自定义属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从联接表更新自定义属性相关的知识,希望对你有一定的参考价值。

我有一个User表,它与auth_assignment表连接以获取用户角色并将其显示在用户的gridview中。角色属性显示在gridview上,但是当我单击操作按钮编辑时,表单已加载且role属性为空。

我试图能够直接在用户更新操作中更新联接表中的字段。可能吗?

我的模特:

class User extends ActiveRecord implements yiiwebIdentityInterface
{
  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' => 'yiigridSerialColumn'],

        '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');
 }

我希望能够在单击操作列编辑按钮时更新角色属性以及其他字段。我能够在gridview中显示角色(perfil)列,但是当我点击更新按钮时,该字段变为空。

update screen

如何更新来自连接表的字段?

答案

为了更新联接表字段,我在更新函数中实例化了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,
        ]);
    }
}

以上是关于从联接表更新自定义属性的主要内容,如果未能解决你的问题,请参考以下文章

VS code自定义用户代码片段snippet

为动态创建的 Android 片段提供自定义属性值

从 DOM 中读取 HTML 片段并向其中添加自定义数据

Xcode自定义代码块

EF6 自定义迁移表名

从android中的片段更改自定义ActionBar标题