如何在Yii2中获取dropDownList的值?

如何在Yii2中获取dropDownList的值?,yii2,Yii2,我没有在Yii2中的dropDownList上获取所选的值($model->attribute),有什么问题吗?谢谢 这是位于视图上的代码: $command = $connection->createCommand('SELECT att1 FROM table ORDER By table_i

我没有在Yii2中的dropDownList上获取所选的值($model->attribute),有什么问题吗?谢谢

这是位于视图上的代码:

    $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请求加载?