繁体   English   中英

Yii2:如何使用 SQL 查询填充 Gridview 列?

[英]Yii2: how to populate a Gridview column using a SQL query?

我有一个 GridView 有两列:Id 和 Lastname。

Id 列效果很好,但 Lastname 列有问题:我需要执行一个简单的 SQL 查询SELECT lastname FROM persons来完成 Lastname 列。

我不知道该怎么做。 这是我尝试过的:

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        'id',
        [
            'label' => 'Lastname',
            'value' => function() {
                $myQuery = 'SELECT lastname FROM persons';
                return = Yii::$app->getDb()->createCommand($myQuery)->queryAll(); // Problem here.
            }
        ]
    ]
)] ?>

我的 PersonsSearch.php model 的 DataProvider(是否可以在此处添加我的 sql 查询?):

public function search($params)
{
    $query = Persons::find();

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
        'sort' => [
            'defaultOrder' => [
                'id' => SORT_ASC
            ]
        ],
    ]);

    $this->load($params);

    if (!$this->validate()) {
        return $dataProvider;
    }

    $query->andFilterWhere([
        'id' => $this->id,
    ]);

    $query->andFilterWhere(['ilike', 'id', $this->id]);

    return $dataProvider;
}

您在$dataprovider中有什么? 如果它加载了 people 表中的对象,您可以像id - lastname一样调用它,或者您可以这样调用它:

[
            'label' => 'Lastname',
            'value' => function($model) {
                 return $model->lastname;
            }
]

在 PersonsSearch.php

public function rules()
{
    return [
        [['id'], 'integer'],
        [['lastname'], 'safe'],
    ];
}

并搜索 function

public function search($params)
{
    $query = Persons::find();

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
        'sort' => [
            'defaultOrder' => [
                'id' => SORT_ASC
            ]
        ],
    ]);

    $this->load($params);

    if (!$this->validate()) {
        return $dataProvider;
    }

    $query->andFilterWhere([
        'id' => $this->id,
    ]);

    $query->andFilterWhere(['ilike', 'id', $this->id]);
    $query->andFilterWhere(['like', 'lastname', $this->lastname]);

    return $dataProvider;
}

其他方式,当你有

 [
                'label' => 'Lastname',
                'value' => function($model) {
                     return $model->getLastName();
                }
    ]

Persons.php model 中创建名为getLastName()的 function

public function getLastName(){
   $myQuery = 'SELECT lastname FROM persons'; //maybe you have where condition "where id = {$this->id}" ?
   $result = Yii::$app->getDb()->createCommand($myQuery)->queryOne();
   if($result){
        return $result['lastname'];
   }
}

如果您有很多行,则使用queryAll()并 foreach 结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM