Sal*_*ern 3 php mysql yii yii2
我想在GridView :: widget中添加一列
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'owner_id',
'situation',
'address',
[
// 'attribute' => 'address',
'format' => 'html',
'label' => 'Image',
'value' => function ($data) {
return Html::img('http://iicity.ir/' . $data['address'],
['width' => '60px']);
},
],
'slideshow_text',
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
Run Code Online (Sandbox Code Playgroud)
我想添加'owner_id'的名称 ,从另一个表名称在(帐户)表表中:
id = 1 name = jack
id = 2 name = sara
@ suibber接受的回答:
[
'attribute' => 'owner_id',
'value'=>function ($model) {
$info = Account::findOne(['id' => $model->owner_id]);
return isset($info->name) ? $info->name : $model->owner_id;
},
],
Run Code Online (Sandbox Code Playgroud)
有一些问题:
1)构造SQL查询逻辑在视图中公开,因此违反了MVC原则.视图仅用于显示数据.
2)所有相关所有者的数据都是延迟加载的,这意味着查询量乘以表中显示的行数.
3)为什么显示owner_id记录是否不存在?这只是意味着数据已损坏.您甚至不应该检查所有者是否存在,因为逻辑上它应该始终存在,您需要在保存之前执行验证,并且在缺少外键的情况下不要使用手动编写的SQL查询(或使用GUI工具)删除数据.
4) IDE缺乏自动完成功能.
Yii2解决这个问题的方法显然是使用关系.
将此添加到您的模型:
<?php
namespace app\models;
use app\models\User;
use yii\db\ActiveRecord;
/**
* ...
*
* @property User $owner
*/
class Picture extends ActiveRecord
{
/**
* @return \yii\db\ActiveQuery
*/
public function getOwner()
{
return $this->hasOne(User::className(), ['id' => 'owner_id']);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在显示主人的名字GridView:
[
'attribute' => 'owner_id',
'value'=>function ($model) {
/* @var $model app\models\Picture */
return $model->owner->name;
},
],
Run Code Online (Sandbox Code Playgroud)
要不就:
'owner.name',
Run Code Online (Sandbox Code Playgroud)
优点是明确的 - 它的框架方式,代码更短,更易读,数据可以->with('owner')在你的ActiveQueryfor中急切加载GridView.
顺便说一下,INNER JOIN不需要.使用单独的SQL查询提取相关数据.如果由于某种原因,所有者是可选的并且在某些记录中可能不存在,请使用:
[
'attribute' => 'owner_id',
'value'=>function ($model) {
/* @var $model app\models\YourModel */
return $model->owner ? $model->owner->name : null;
},
],
Run Code Online (Sandbox Code Playgroud)
官方文档中详细介绍了处理相关数据,因此这是一个非常基本的问题.首先检查文档.
| 归档时间: |
|
| 查看次数: |
2139 次 |
| 最近记录: |