接上一篇 基于yii2的blog系统开发2:
第七步 展示关联表字段
比如把post表里面的状态id换成状态名字显示,作者id换成作者名字显示
以文章详情页为例子:
修改backend/views/post/view.php
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
'title',
'content:ntext',
'tags:ntext',
// 'status',
[
'attribute'=>'status',
'label'=>'状态',
'value'=>$model->status0->name,
],
'create_time:datetime',
'update_time:datetime',
//'author_id',
[
'attribute'=>'author_id',
//'label'=>'作者',
'value'=>$model->author->username,
],
],
//自定义表格格式
'template'=>'<tr><th style="width:80px">{label}</th><th>{value}</th></tr>',
'options'=>['class'=>'table table-striped table-bordered detail-view'],
]) ?>
第八步 日期格式化显示
修改backend/views/post/view.php
[ 'attribute'=>'create_time',
'value'=>date('Y-m-d H:i:s',$model->create_time),
],
第九步 下拉菜单展示关联字段
以backend/views/post/update.php为例,这里面渲染了_form.php,修改这个_form.php文件:
<?= $form->field($model, 'status')->dropDownList([1=>'草稿',2=>'已发布'],['prompt'=>'请选择状态']) ?>
数据不能写死,要从数据库里面拿出来,所以应该这么写:
use common\models\Poststatus;
use yii\helpers\ArrayHelper;
......
<?php
$data1 = Poststatus::find()->all();
$data = ArrayHelper::map($data1,'id','name');
?>
<?= $form->field($model, 'status')->dropDownList($data,['prompt'=>'请选择状态']) ?>
weixi老师另外介绍用QueryBuilder的方法
//$data = (new \yii\db\Query())->select(['name','id'])->from('poststatus')->indexBy('id')->column();
//推荐
$data = Poststatus::find()->select(['name','id'])->orderBy('position')->indexBy('id')->column();
关于Array Helper类
1.getValue
class User{public $name='lq';}
$array=['foo'=>['bar'=>new User()]];
php写法:
$value = isset($array['foo']['bar']->name)?$array['foo']['bar']->name:null;
ArrayHelper写法:
$value = ArrayHelper::getValue($array,'foo.bar.name');
2.getColumn
$data=[
['id'=>'123','data'=>'a'],
['id'=>'234','data'=>'b'],
];
$ids = ArrayHelper::getColumn($data,'id');
output:['123','234']
3.map
$result = ArrayHelper::map($data,'id','data');
output:['123'=>'a','234'=>'b']