为什么我的网格视图中的操作列(查看、更新、删除)返回值id从零增量(不从数据库返回 id)?
我的控制器
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,
]);
}
Run Code Online (Sandbox Code Playgroud)
我的看法
<?= 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'],
],
]); ?>
Run Code Online (Sandbox Code Playgroud)
当我单击“操作列”中的“查看”或“更新”按钮时,URL 返回view?id=0或update?id=0不id从数据库返回。
我如何解决它?
您需要声明哪一列是 SqlDataProvider 中的标识列。否则您只会得到该序列号。因此将关键属性放入提供者:
$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,
],
]);
Run Code Online (Sandbox Code Playgroud)
那对你有用吗?我想我的其他答案价值不高......
顺便说一句:这个
$sql = "SELECT * FROM adikbinaan WHERE adikbinaan.jenjang_id = $jenjang";
Run Code Online (Sandbox Code Playgroud)
很危险,因为 SQL 注入会起作用。还有如何高效地计算记录的方式。查看SqlDataProvider类的示例。所COUNT(*)使用的数据传输量相当少。
| 归档时间: |
|
| 查看次数: |
1661 次 |
| 最近记录: |