2016-11-21 1 views
0

ActiveQuery nicht map.src_fin_position_id SpalteYii2 ActiveQuery Beziehung Frage kommen

$query = FinancePossibleFinPositions::find() 
      ->select (['dst.row_num', 'dst.src_value', 'map.src_fin_position_id']) 
      ->from('finance.possible_fin_positions dst') 
      ->leftJoin('finance.fin_pos_mapping map','map.map_fin_position_id = dst.possible_fin_positions_id') 
      ->leftJoin('finance.possible_fin_positions src','src.possible_fin_positions_id = map.src_fin_position_id AND src.possible_fin_docs_id = :possible_fin_docs_id',[":possible_fin_docs_id"=> 95]) 
      ->where('dst.possible_fin_docs_id=:possible_fin_docs_id', [":possible_fin_docs_id"=> 88]) 
      ->orderBy('dst.row_num') 
      ->all(); 

gibt

array(2) { 
    ["row_num"]=> 
    string(4) "1000" 
    ["src_value"]=> 
    string(18) "My value" 
} 

obwohl

$query = (new \yii\db\Query()) 
       ->select(["dst.row_num", "dst.src_value", "map.src_fin_position_id"]) 
       ->from('finance.possible_fin_positions dst') 
       ->join('LEFT JOIN','finance.fin_pos_mapping map','map.map_fin_position_id = dst.possible_fin_positions_id') 
       ->join('LEFT JOIN','finance.possible_fin_positions src','src.possible_fin_positions_id = map.src_fin_position_id AND src.possible_fin_docs_id = :possible_fin_docs_id',[":possible_fin_docs_id"=> $fin_doc]) 
       ->where('dst.possible_fin_docs_id=:possible_fin_docs_id', [":possible_fin_docs_id"=> $main_fin_doc]) 
       ->orderBy('dst.row_num')->all(); 

gibt das Ergebnis, das ich mit bekommen müssen nicht wählen ActiveQuery

array(3) { 
    ["row_num"]=> 
    string(4) "1000" 
    ["src_value"]=> 
    string(18) "My value" 
    ["src_fin_position_id"]=> 
    int(3426) 
    } 

würde ich \yii\db\Query() verwenden, aber wenn ich tabellarischer Form mit diesem Array füllen die $ _POST ist leer. Kann jemand dieses Problem lösen?

UPDATE

Einfachere Beispiel

form.php

<div class="col-md-6"> 
     <?php 
      $form = ActiveForm::begin(['id'=>'post-multiple','action' => ['submit-posts']]); 
      echo TabularForm::widget([ 
      'form' => $form, 
      'dataProvider' => $dataProvider, 
      'serialColumn' => false, 
      'actionColumn' => false, 
      'checkboxColumn' => false, 
      'attributes' => [ 
       'post_id' => ['type' => TabularForm::INPUT_STATIC, 'columnOptions'=>['hAlign'=>GridView::ALIGN_CENTER]], 
       'post_title' => ['type' => TabularForm::INPUT_STATIC], 
       'post_description' => ['type' => TabularForm::INPUT_TEXT, 'options' => ['class' => 'droppable']], 
      ], 
      'gridSettings' => [ 
       'floatHeader' => true, 
       'panel' => [ 
        'heading' => '<h3 class="panel-title"><i class="glyphicon glyphicon-book"></i> Manage Books</h3>', 
        'type' => GridView::TYPE_PRIMARY, 
        'after'=> 
         Html::a(
          '<i class="glyphicon glyphicon-plus"></i> Add New', 
          '#', 
          ['class'=>'btn btn-success'] 
         ) . '&nbsp;' . 
         Html::a(
          '<i class="glyphicon glyphicon-remove"></i> Delete', 
          '#', 
          ['class'=>'btn btn-danger'] 
         ) . '&nbsp;' . 
         Html::submitButton(
          '<i class="glyphicon glyphicon-floppy-disk"></i> Save', 
          ['class'=>'btn btn-primary'] 
         ) 
       ] 
      ]  
     ]); 
     ActiveForm::end(); ?> 
    </div> 

Controller

 public function actionTabular() 
     { 
    //  $query = (new \yii\db\Query()) 
    //  ->select("post_id, post_title, post_description") 
    //  ->from('posts'); 

      $query = Posts::find()->indexBy('post_id'); 

      $dataProvider = new ActiveDataProvider([ 
        'query' => $query, 
        'pagination' => false, 
      ]); 

      return $this->render('tabular', [ 
       'dataProvider'=>$dataProvider, 
      ]); 
     } 
    public function actionSubmitPosts() 
    { 
     var_dump(Yii::$app->request->post());exit; 
} 


$query = Posts::find()->indexBy('post_id'); 

<input type="text" id="posts-40-post_description" class="droppable form-control ui-droppable" name="Posts[40][post_description]" value="tre"> 

_POST $ ist nicht leer

$query = (new \yii\db\Query()) 
->select("post_id, post_title, post_description") 
->from('posts'); 

<input type="text" id="-28-post_description" class="droppable ui-droppable" name="[28][post_description]" value="tre"> 

$ _POST ist leer

Beide Abfragen das Formular korrekt Der Unterschied ist, Eingänge Namen zu füllen. Aber ich muss dieses Formular nicht validieren, und es ist seltsam, warum

[28] [post_description] geht nicht in $ _POST.

+0

Update Ihre Frage verwendet haben sollte und den Code zeigen, wo Sie "mit diesem Array tabellarischer Form füllen" – scaisEdge

Antwort

0

Von Yii 2 Guide:

Hinweis: Wenn Sie wählen() aufrufen, während eifrig Beziehungen laden, müssen Sie die Spalten stellen Sie sicher, in der Beziehung Erklärungen verwiesen wird, ausgewählt werden. Andernfalls werden die zugehörigen Modelle möglicherweise nicht ordnungsgemäß geladen. Zum Beispiel

$orders = Order::find()->select(['id', 'amount'])->with('customer')->all(); 
// $orders[0]->customer is always null. 
// To fix the problem, you should do the following: 
$orders = Order::find() 
    ->select(['id', 'amount', 'customer_id']) 
    ->with('customer')->all(); 
0

dachte ich dies. Für yii \ db \ Abfrage

I

<?= Html::beginForm(['save-posts','method'=>'post']); ?> 
Verwandte Themen