如何创建一个新的输入字段,它将提供存储在不同数据库表中的值? Yii2

时间:2017-05-11 10:50:02

标签: yii2

很难正确地提出问题,但我会在这里解释一下。我有ItemCategorySale型号。在categoryItem模型中,我手动存储了数据。现在我创建了一个表单,其中包含一些输入字段和dependent drop-down,即:

根据所选类别,项目已加载。

现在我需要创建一个新的输入字段,该字段为price,并且必须从数据库中将其作为要约(如果用户选择Item1 - > {{1必须在输入字段中将price加载为offer,我可以编辑它并存储在不同的数据库表中。

我该怎么做?

这是我的Item1

SaleController action

这是我的 /** * Creates a new sale * * @return string */ public function actionCreate() { $model = new Sale(); $model->scenario = Sale::SCENARIO_CREATE; $category = new Category(); $category->scenario = Category::SCENARIO_CREATE; $categoryList = ArrayHelper::map(Category::find()->all(), 'id', 'name'); if ($model->load(Yii::$app->request->post())) { if ($model->save()) { return $this->redirect(['index']); } } return $this->render('create', [ 'model' => $model, 'category' => $category, 'categoryList' => $categoryList, ]); }

view

感谢您的帮助。我希望你理解这个问题

1 个答案:

答案 0 :(得分:1)

首先,您必须在模型中添加输入字段:

<?= $form->field($model, 'item_price')->textInput([
       'maxlength' => true,
       'id' => 'input-price-id'
   ]) ?>

然后你需要添加一些javascript:

<?php
$item_price=<<<JS
$('#item-id').on('change', function(event) {
        var id = $(this).attr('id');
        var val = $(this).val();        
        .get(
            // you must code function actionRefreshPrice wtih parameter named item_id in 
            // your controller with fetch from any table you want
            'refresh-price',         
            {                
                item_id: val // this is id from your item
            },
            function (data) {
                // here you set a value returned from ajax call
                // you must have an input element with id input-price-is (change as you like)
                $('#input-price-id').val(data);            
            }  
        );
});
JS;
$this->registerJs($item_price);
?>

然后你必须添加一个像这样的控制器动作:

public function actionRefreshPrice($item_id) {
        // I asume you have table with Price for items prices
        $price = Price::findOne(['item_id'=>$item_id]);
        return ($price?0:$price->price_field);
}

我希望我已经给了你足够的指导。评论更多地了解模型和关系。我认为你有点推翻了问题。快乐的学习和编码。