Jeen 2018-01-10 10:11:45 3965次浏览 0条评论 1 0 0

由于私信篇幅有限,在这边回复一下网友的问题。

问题节选如下:

如何在GridView里面,显示表关联表的字段?网上的教程好像都只讲了70%,有没有推荐我的文章?

回答如下:

GridView 显示关联表字段的形式有很多种。
问题的核心在于你要理解模型数据渲染的具体执行流程, 建议看下相关的源码。
推荐的文章倒是没有。给你几个我个人的解决方法吧
一、dataProvider中关联的model中已添加关联的情况,如

class ModelA extends ActiveRecord
{
//...
  public function getRelate()
  {
    return $this->hasOne(ModelRelate::class, ['a_id' => 'id']);
  }
}

方法1、直接使用属性形式

//...  展示 ModelRelate 中的  relate_desc 属性  
columns => [
  'relate.relate_desc',
  'relate.a_id',
],

方法2、重写 value 取值方法

//...
columns => [
   'id',
   //....
   [
      'label' => '关联取值',
      'value' => function($modelA) {
              return $modelA->getRelate()->relate_desc;
       }
   ]
]

二、 根据一中的 方法2,其实可以提炼出其它很多的处理方法,展示任何你想展示的数据。
比如:

//...
columns => [
   'id',
   //...
   [
      'label' => '取任意值',
      'format' => 'raw',
      'value' => function($modelA) {
              $c = ModelC::find()->where([ 'id' => $modelA->c_id ])->one();
              if ($c) {
                  return $c->c_name;
              }
              return '<span>no c found</span>';
       }
   ]
]

多尝试多练习吧

    没有找到数据。
您需要登录后才可以评论。登录 | 立即注册