2017-09-04 101 views
0

我不是在Yii2的dropDownList中抓取選定的值($ model-> attribute),可能會出錯?由於如何獲取Yii2中dropDownList的值?

這是位於上查看代碼:

$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> 

這是控制器:

public function actionTest() 
    { 
     $model = new TestForm(); 

      if ($model->load(Yii::$app->request->post()) && $model->validate()) { 
        $model->insertTest(); 
       return $this->renderAjax('test', ['model' => $model]);  

      } else { 
       return $this->renderAjax('test', ['model' => $model]); 
      } 

    } 

該模型具有$屬性的定義,insertTest()是一個函數,它使用$屬性值que ry到數據庫。因爲你需要一個一維數組

+0

您需要向我們展示如何啓動'$ model'。可能在控制器中並從POST/GET請求中加載..? – lubosdz

回答

1

您從表中只att1選擇,所以你應該映射此列

$listData = ArrayHelper::index($rows, 'att1'); 

調試嘗試修改actionTest評論$模型 - > insertTest();並使用$ model-> save(); 如果該值被保存在數據庫,那麼你應該檢查你$模型 - > 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]); 
      } 

    } 
+0

謝謝你的回答,它是一個更好的方式來生成dropDownList的列表,但是在抓取字段($ model,'attribute') - > dropDownList($ listData,[ 'prompt'=>'屬性列表'。 ?> –

+0

你有什麼問題..你有沒有數據在列表中? ..提交時你有沒有價值? ..解釋更好請 – scaisEdge

+0

dropDownList顯示這樣的值的列表:0 \ n屬性1 1 \ n屬性2 2 \ n屬性3 3 \ n屬性4 ...問題是,如果我選擇屬性3例如該值不是在提交之後被變量$屬性抓住。我可能做錯了什麼?謝謝。 –

0

裏面我找到了解決這個問題。

通過這種方式,表單無法保存提交的信息。

$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'); 
1

你應該ArrayHelper使用地圖

$listdata = ArrayHelper::map(CategoryModel::find()->orderBy(['table_id' => SORT_ASC])->all(), 'table_id', 'table_text'); 

注: 'table_text' 是將顯示在下拉菜單標籤表屬性。

相關問題