:
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'ID_REQUEST',
'NOMOR_SURAT',
[
'label' => 'Nama Depan',
'attribute' => 'ID_KARYAWAN',
'value' => 'iDKARYAWAN.FIRST_NAME'
],
[
'label' => 'Nama Belakang',
'attribute' => 'ID_KARYAWAN',
'value' => 'iDKARYAWAN.LAST_NAME'
],
iDKARYAWAN是我模型中另一个表的关系
class Request extends \yii\db\ActiveRecord {
/**
* @inheritdoc
*/
public static function tableName() {
return 'ytms_it.request';
}
public function getIDKARYAWAN() {
return $this->hasOne(Karyawan::className(), ['ID_KARYAWAN' => 'ID_KARYAWAN'])->from(Karyawan::tableName(). ' b');
}
如何合并这两列?
对于elp,谢谢。
答案 0 :(得分:1)
在相关模型中创建名为getFullName()
的方法,并使用PHP连接计算全名:
use yii\helpers\Html;
...
/**
* @return string
*/
public function getFullName()
{
return Html::encode($this->name . ' ' . $this->surname);
}
可选择在相关模型的attributeLabels()
方法中为其定义标签:
`fullName` => 'Label for full name',
然后在GridView中,可以在一列中显示相关模型的全名,如下所示:
1)最短的形式:
'relatedModel.fullName',
2)覆盖标签:
[
'attribute' => 'relatedModel.fullName',
'label' => 'Overrided label',
],
3)使用闭包:
[
'attribute' => 'relatedModel.fullName', // The attribute name can be different in this case
'value' => function ($model) {
// You can calculate full name here.
// But it's better to just call according method since view is only for display.
return $model->author->fullName;
},
],
另一种方法是使用SQL计算全名,并将其作为查询结果的一部分包含在单独的列中。
使用Active Record - Selecting extra fields官方文档部分作为指南,另请参阅Github上的相关问题 - JoinWith - assign a column aliases to an attribute of related model。
添加$fullName
作为相关模型类的公共属性。像这样修改查询:
use yii\db\Expression;
...
->joinWith(['relatedModel' => function (\yii\db\ActiveQuery $query) {
$query->addSelect('fullName' => new Expression("CONCAT(name, ' ', surname)")]);
}]
然后要在GridView
列中显示它,您可以使用上面提到的选项之一,例如:
'relatedModel.fullName'