簡體   English   中英

Yii2 ActiveQuery聯接關系問題

[英]Yii2 ActiveQuery join relation issue

ActiveQuery不會選擇map.src_fin_position_id

$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();

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

雖然

$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();

給出我需要通過ActiveQuery獲得的結果

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

我將使用\\yii\\db\\Query()但是當我用該數組填寫表格形式時, $ _ POST為空。 有誰知道如何解決這個問題?

UPDATE

更簡單的例子

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>

控制器

        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不為空

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

兩個查詢均正確填寫了表格。不同之處在於輸入名稱。 但是我不需要驗證此表格,這很奇怪

[28] [post_description]沒有加入$ _POST。

來自Yii 2 Guide

注意 :如果在急切加載關系時調用select(),則必須確保選擇了關系聲明中引用的列。 否則,相關模型可能無法正確加載。 例如,

$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();

我想通了。 對於yii \\ db \\ Query

我應該用過

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM