很难正确地提出问题,但我会在这里解释一下。我有Item
,Category
和Sale
型号。在category
和Item
模型中,我手动存储了数据。现在我创建了一个表单,其中包含一些输入字段和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
感谢您的帮助。我希望你理解这个问题
答案 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);
}
我希望我已经给了你足够的指导。评论更多地了解模型和关系。我认为你有点推翻了问题。快乐的学习和编码。