如何使用具有多个模型关系的 Yii2 kartik gridview 可编辑列
How to use Yii2 kartik gridview editable column with mulitple model relations
问题:
我有 2 个模型,用户模型和用户配置文件模型,都与主键和外键相关user_id,
用户 table 有字段 ID、用户名、密码、电子邮件等
user_profile table 已提交 ID、user_id、公司、phone 等
我已经在用户视图中创建了gridview。我正在使用 kartik Editable 列,我想从用户 gridview 编辑用户配置文件 table 字段公司。
到目前为止我做了什么。
请检查代码我做了什么。
请注意:这是我在这里展示的部分代码,我认为它足以理解。如果你想看更多我会编辑问题。
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' => [
]
]
],
],
];
//注意:使用了所有命名空间
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();
问题是
当我点击公司价值时,它显示为空白。请检查图像。
尝试将下面描述的方法添加到您的用户模型中:
public function getCompany()
{
return $this->userProfiles->company;
}
在User Model中,有没有你提到的模型关系?不,定义它们之间的关系如下。
public function getUserProfiles()
{
return $this->hasOne(UserProfile::className(), ['user_id' => 'id']);
}
现在在与下面相同的模型中创建一个赋值方法
public function getProfileCompany(){
return $this->company = $this->userProfiles->company;
}
现在在 Gridview 中使用 getProfileCompany 方法并赋值如下
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' => [
]
]
],
],
];
问题:
我有 2 个模型,用户模型和用户配置文件模型,都与主键和外键相关user_id, 用户 table 有字段 ID、用户名、密码、电子邮件等 user_profile table 已提交 ID、user_id、公司、phone 等
我已经在用户视图中创建了gridview。我正在使用 kartik Editable 列,我想从用户 gridview 编辑用户配置文件 table 字段公司。
到目前为止我做了什么。 请检查代码我做了什么。
请注意:这是我在这里展示的部分代码,我认为它足以理解。如果你想看更多我会编辑问题。
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' => [
]
]
],
],
];
//注意:使用了所有命名空间
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();
问题是
当我点击公司价值时,它显示为空白。请检查图像。
尝试将下面描述的方法添加到您的用户模型中:
public function getCompany()
{
return $this->userProfiles->company;
}
在User Model中,有没有你提到的模型关系?不,定义它们之间的关系如下。
public function getUserProfiles()
{
return $this->hasOne(UserProfile::className(), ['user_id' => 'id']);
}
现在在与下面相同的模型中创建一个赋值方法
public function getProfileCompany(){
return $this->company = $this->userProfiles->company;
}
现在在 Gridview 中使用 getProfileCompany 方法并赋值如下
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' => [
]
]
],
],
];