gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:20:14 24 4
gpt4 key购买 nike

为什么我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com