如何在Yii2中获取dropDownList的值?
我没有在Yii2中的dropDownList上获取所选的值($model->attribute),有什么问题吗?谢谢 这是位于视图上的代码:如何在Yii2中获取dropDownList的值?,yii2,Yii2,我没有在Yii2中的dropDownList上获取所选的值($model->attribute),有什么问题吗?谢谢 这是位于视图上的代码: $command = $connection->createCommand('SELECT att1 FROM table ORDER By table_i
$command = $connection->createCommand('SELECT att1
FROM table
ORDER By table_id ASC');
$rows = $command->queryAll();
$command->execute();
$listData = ArrayHelper::index($rows, null, 'table_id');
然后在同一视图上调用$listData
<div class="row">
<div class="col-lg-9">
<?php Pjax::begin(['enablePushState' => false]); ?>
<?php $form = ActiveForm::begin(['id' => 'test-form', 'options' => ['data-pjax' => true]
]); ?>
<?= $form->field($model, 'attribute')->dropDownList($listData, ['prompt'=>'List of attributes.']); ?>
<div class="form-group">
<?= Html::submitButton('Submit', ['class' => 'btn btn-primary', 'name' => 'test-button']) ?>
</div>
<?php ActiveForm::end(); ?>
<?php Pjax::end(); ?>
</div>
</div>
该模型具有$attribute的定义,insertTest()是一个使用$attribute的值来查询数据库的函数。您应该使用
ArrayHelper::map($listData,'table_id','table_id')代码>
因为你需要一个一维数组
最好使用ActiveRecord查询数据库
想到你应该使用
ArrayHelper::map($listData,'table_id','table_id')代码>
因为你需要一个一维数组
最好使用ActiveRecord查询数据库
您只从表中选择了att1
,所以您应该映射此列
$listData = ArrayHelper::index($rows, 'att1');
对于调试,请尝试修改actionTest注释$model->insertTest();并使用$model->save();
如果该值保存在db中,则应在$model->insertTest()函数中进行检查
public function actionTest()
{
$model = new TestForm();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
// $model->insertTest();
$model->save();
return $this->renderAjax('test', ['model' => $model]);
} else {
return $this->renderAjax('test', ['model' => $model]);
}
}
您只从表中选择了att1
,因此应该映射此列
$listData = ArrayHelper::index($rows, 'att1');
对于调试,请尝试修改actionTest注释$model->insertTest();并使用$model->save();
如果该值保存在db中,则应在$model->insertTest()函数中进行检查
public function actionTest()
{
$model = new TestForm();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
// $model->insertTest();
$model->save();
return $this->renderAjax('test', ['model' => $model]);
} else {
return $this->renderAjax('test', ['model' => $model]);
}
}
我找到了那个问题的解决办法
通过这种方式,表单无法保存提交的信息
$command = $connection->createCommand('SELECT att1
FROM table
ORDER By table_id ASC');
$rows = $command->queryAll();
$command->execute();
$listData = ArrayHelper::index($rows, null, 'table_id');
但是,通过这种方式,表单能够获取所选的值并将其放入变量中
$rows = table::find()->all();
$listData = ArrayHelper::map($rows,'table_id','att1');
我找到了那个问题的解决办法
通过这种方式,表单无法保存提交的信息
$command = $connection->createCommand('SELECT att1
FROM table
ORDER By table_id ASC');
$rows = $command->queryAll();
$command->execute();
$listData = ArrayHelper::index($rows, null, 'table_id');
但是,通过这种方式,表单能够获取所选的值并将其放入变量中
$rows = table::find()->all();
$listData = ArrayHelper::map($rows,'table_id','att1');
您应该在ArrayHelper中使用map
$listdata = ArrayHelper::map(CategoryModel::find()->orderBy(['table_id' => SORT_ASC])->all(), 'table_id', 'table_text');
注意:“table_text”是将出现在下拉标签中的表格属性。您应该在ArrayHelper中使用map
$listdata = ArrayHelper::map(CategoryModel::find()->orderBy(['table_id' => SORT_ASC])->all(), 'table_id', 'table_text');
注意:“table_text”是将出现在下拉标签中的表格属性。谢谢您的回答,这是生成下拉列表列表的更好方法,但是问题仍然存在于从您的问题中获取所选值的时刻。。列表?中没有数据。。提交时您没有值。。请更好地解释下拉列表显示如下值的列表:0\n attribute1 1\n attribute2 2\n attribute3 3\n attribute4。。。问题是,例如,如果我选择attribute3,那么在提交之后变量$attribute不会获取该值。我可能做错了什么?谢谢。更新您的问题并显示相关的控制器操作,以便我可以评估获得提交结果的代码。如果您检查提交的值是否为“抓取”值。。您是否在$model->insertTest()之前尝试过var_dump($model)。。insertTest()函数的作用是什么?感谢您的回答,这是为dropDownList生成列表的更好方法,但是问题仍然存在于从您的问题中获取所选值的时刻。。列表?中没有数据。。提交时您没有值。。请更好地解释下拉列表显示如下值的列表:0\n attribute1 1\n attribute2 2\n attribute3 3\n attribute4。。。问题是,例如,如果我选择attribute3,那么在提交之后变量$attribute不会获取该值。我可能做错了什么?谢谢。更新您的问题并显示相关的控制器操作,以便我可以评估获得提交结果的代码。如果您检查提交的值是否为“抓取”值。。您是否在$model->insertTest()之前尝试过var_dump($model)。。insertTest()函数的作用是什么?您需要向我们展示如何启动$model
。可能在控制器中,并从POST/GET请求加载?您需要向我们展示如何启动$model
。可能在控制器中,并从POST/GET请求加载?