yii2 hasOne, 在列表显示分类名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yii2 hasOne, 在列表显示分类名称相关的知识,希望对你有一定的参考价值。

分类表: category:[‘cid‘, ‘parent‘,‘category‘...]

新闻表:news:  [‘id‘, ‘cid‘, ‘title‘...]

建立news与category的关系:使用gii的crud会自动生成如下代码:

Category:

public function getNews()
{
     return $this->hasMany(News::className(), [‘cid‘ => ‘cid‘]);
}


News:

public function getC()
{
    return $this->hasOne(Category::className(), [‘cid‘ => ‘cid‘]);
}



修改NewsController的index:

$dataProvider = new ActiveDataProvider([
            ‘query‘ => News::find(),
        ]);


修改为:

$dataProvider = new ActiveDataProvider([
            ‘query‘ => News::find()->with(‘c‘), //c即News: getC()
        ]);


然后再列表修改显示:

<?= GridView::widget([
        ‘dataProvider‘ => $dataProvider,
        ‘columns‘ => [
            [‘class‘ => ‘yii\grid\SerialColumn‘],

            ‘id‘,
            ‘c.category‘,  //c.category就是分类名称
            ‘title‘,
            ‘content:ntext‘,
            //‘image‘,
            // ‘keywords‘,
            // ‘description‘,
            [
                ‘attribute‘ => ‘create_time‘,
                ‘format‘ => [‘date‘, ‘Y-m-d‘],
            ],
            // ‘update_time:datetime‘,
             ‘status‘,
            // ‘out_link‘,
             ‘sort‘,
             ‘click‘,
            // ‘lang‘,

            [‘class‘ => ‘yii\grid\ActionColumn‘],
        ],
    ]); ?>


以上是关于yii2 hasOne, 在列表显示分类名称的主要内容,如果未能解决你的问题,请参考以下文章

yii2多表关联案例代码

ecshop 新建页面 怎么调用文章分类

Yii2 - ActiveDataProvider试图获取非对象的属性

如何在yii2 gridview中为大数据表显示一行中的表头名称

yii2 kartik select2 小部件不显示列表的第一个元素

Yii2 Gridview外键