gridview - Yii2:使用 SqlDataProvider 时 GridView 中的 ActionColumn 不起作用

标签 gridview yii2

为什么我的 GridView 中的操作列(查看、更新、删除)返回值 id 从零开始增量(不从数据库返回 id)?

我的 Controller

public function actionIndex()
{
    $jenjang = Yii::$app->request->get('jenjang');

    $sql = "SELECT * FROM adikbinaan";

    if($jenjang!=0){
        $sql = "SELECT * FROM adikbinaan WHERE adikbinaan.jenjang_id = $jenjang";
    }

    $n = count(CariAdikBinaan::findBySql($sql)->all());

    $adikbinaan = new SqlDataProvider([
        'sql' => $sql,
        'totalCount' => $n,
        'sort' => [
            'attributes' => [
                'ADIKBINAAN_NAMALENGKAP',
            ],
        ],
        'pagination' => [
            'pageSize' => 20,
        ],
    ]);

    $adik = new CariAdikBinaan();

    return $this->render('index', [
        'dataProvider' => $adikbinaan,
        'data' => $adik,
    ]);
}

我的看法

    <?= GridView::widget([
    'dataProvider' => $dataProvider,
    'layout'=>"{pager}\n{items}\n{summary}",
    'showFooter'=>true,
    'showHeader'=>true,
    'showOnEmpty'=>false,
    'columns' => [
        'ADIKBINAAN_NAMALENGKAP',
        'ADIKBINAAN_TEMPATLAHIR',
        'ADIKBINAAN_TANGGALLAHIR',
        ['class' => 'yii\grid\ActionColumn'],
    ],
]); ?>

当我点击操作列中的查看更新按钮时,URL返回view?id=0update?id =0 不是数据库中的 id

如何修复它?

最佳答案

您需要声明哪一列是 SqlDataProvider 中的标识列。否则您只会得到该序列号。所以把key提供者的属性:

$adikbinaan = new SqlDataProvider([
    'sql'        => $sql,
    'totalCount' => $n,
    'key'        => 'id'  // <---- here it is, can also be an array of strings if more columns are identifiying ones
    'sort'       => [
        'attributes' => [
            'ADIKBINAAN_NAMALENGKAP',
        ],
    ],
    'pagination' => [
        'pageSize' => 20,
    ],
]);

这对你有用吗?我想我的其他答案没有那么有值(value)......

顺便说一句:这个

$sql = "SELECT * FROM adikbinaan WHERE adikbinaan.jenjang_id = $jenjang";

很危险,因为 SQL 注入(inject)会起作用。还有如何高效地计算记录的方式。看类SqlDataProvider的例子。使用COUNT(*),这需要相当少的数据传输。

关于gridview - Yii2:使用 SqlDataProvider 时 GridView 中的 ActionColumn 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30994345/

相关文章:

Android:在 gridview 中重用嵌入式 View [已发布的解决方案]

apache - 将 Yii 2 应用程序部署到文档根目录的子目录

php - 过滤 gridview 后的 Yii2 导出

javascript - yii2 kartik 开关输入类型单选按钮在 javascript 中获取值

c# - 将 JSON 转换并绑定(bind)到 asp.net gridview

gridview - extjs 有状态网格删除排序

asp.net - 在 GridView 自动数据绑定(bind)中捕获错误

android - 关于点击问题的 Recyclerview 子项目

php - 如何在 yii2 中向 sql 表的现有值添加值?

javascript - Yii2:将变量从 Controller 传递给javascript