如何使用具有多个模型关系的Yii2 kartik gridview可编辑列 [英] How to use Yii2 kartik gridview editable column with mulitple model relations

查看:165
本文介绍了如何使用具有多个模型关系的Yii2 kartik gridview可编辑列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题:

我有2个模型,用户模型和用户配置文件模型,它们都与主键和外键user_id相关, 用户表具有字段ID,用户名,密码,电子邮件等 user_profile表具有文件ID,用户ID,公司,电话等

I have 2 models, user model and user profile model, both are related with primary and forien key user_id, user table has fields id,username, password, email etc user_profile table has filed id, user_id, company, phone etc

我已经在用户视图中创建了gridview.我正在使用kartik EditableColumn,我想从用户gridview编辑用户配置文件表字段公司.

I have created gridview in user view. I am using kartik EditableColumn, I want to edit user profile table field company from user gridview.

到目前为止我所做的. 请检查代码我做了什么.

What I have done so far. Please check code what I have done.

请注意:这是我在此处显示的代码的一部分,我认为这足以理解.如果您想了解更多,我将编辑问题.

please note: it is portion of code i am showing here, and I think it is enough to understand. if you like to see more i will edit question.

use yii\helpers\Url;
$gridColumns = [
     [
    'class' => 'kartik\grid\EditableColumn',
    'attribute' => 'company',
    'pageSummary' => true,
    'readonly' => false,
    'value' => 'userProfiles.company',
    'content' => function($data,$model){return '<div class="text_content">'.htmlentities($data->userProfiles->company).'</div>';},
    'editableOptions' => [
            'header' => 'Company',
            'inputType' => kartik\editable\Editable::INPUT_TEXT,
            'options' => [
                'pluginOptions' => [

                ]
            ]
        ],
    ],  

    ];

//注意:使用了所有命名空间

//note: used all namespace

 Pjax::begin(); 
 GridView::widget([

    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'class' => 'kartik\grid\EditableColumn',
    'responsive'=>true,
    'hover'=>true,
    'pjax'=>true,
    'tableOptions'=>['class'=>'table table-bordered table-striped dataTable table-hover'],
    'summaryOptions' => ['class' =>'dataTables_info'],
    'layout'=>"{items}\n<div class='row' style='margin:0.1%'>
                         <div class='col-sm-5'>
                            {summary}
                         </div>
                         <div class='col-sm-7'>
                            <div class='dataTables_paginate paging_simple_numbers'>{pager}</div>
                         </div>
                         </div>",
    'columns' => $gridColumns,
]); Pjax::end(); 

问题是

当我单击公司价值时,它显示为空白.请检查图像.

When I click on company value it shows me blank. please check image.

推荐答案

在用户模型中,您是否提到了模型关系?不,请按照以下说明定义它们之间的关系.

In User Model, Is there model relation you have mentioned? no, define relation between them as followed.

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

现在在与以下相同的模型中创建赋值方法

Now create an assigning value method in same model as below

public function getProfileCompany(){
    return $this->company = $this->userProfiles->company;
} 

现在在Gridview中使用getProfileCompany方法并分配值如下

Now in Gridview use getProfileCompany method with assigning value as below

   use yii\helpers\Url;
   $gridColumns = [
   [
   'class' => 'kartik\grid\EditableColumn',
   'attribute' => 'company',
   'pageSummary' => true,
   'readonly' => false,
   'value' => function($model){ return $model->profileCompany; }, // assign value from getProfileCompany method
   'editableOptions' => [
        'header' => 'Company',
        'inputType' => kartik\editable\Editable::INPUT_TEXT,
        'options' => [
            'pluginOptions' => [

            ]
        ]
    ],
],  

];

这篇关于如何使用具有多个模型关系的Yii2 kartik gridview可编辑列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆