我通过javascript和Productnames
控制器中的操作从表中获取一行。
我得到的字段是 productid , productname 和 bottletype 。到目前为止一切都很好。
JS
<?php
$script = <<< JS
$('#catid').change(function(){
var catid = $(this).val();
$.get('index.php?r=production/productnames/get-for-production',{ catid : catid }, function(data){
alert(data.unitprice);
// var data = $.parseJSON(data);
// $('#productnames-bottletype').attr('value',data.bottletype)
});
});
JS;
$this->registerJs($script);
?>
ProductnamesController
中的操作
public function actionGetForProduction($catid)
{
$bottle = Productnames::findOne(['productnames_productname'=>$catid]);
//$bottle -> select(['productnames.productnames_productname','productnames.bottletype','bottlename.unitprice'])->from('Productnames')->leftJoin('bottlename','productnames.bottletype = bottlename.bottlename')->where(['productnames_productname'=>$catid])->limit(1);
echo Json::encode($bottle);
}
现在我想从 bottlename 表中获取与 Productname 表相关的数据productname.bottletype = bottlename.bottlename
。
表bottlename
有3个字段:
id,bottlename,unitprice。
我从上面提到的代码中获取 productname , bottlename 。我想要的帽子是获取 unitprice 以及上述数据。
下面是我现在收到的截图:
答案 0 :(得分:1)
你应该在产品名模型中有一个&#39;瓶名&#39;与瓶子名称的关系&#39; table(我称之为bottlenameRelation以区别于bottlename字段):
public function getBottlenameRelation() {
return $this->hasOne(Bottlename::className(), ['bottlename' => 'bottletype']);
}
然后在动作中添加bottlenameRelation引用:
public function actionGetForProduction($catid)
{
$bottle = Productnames::find()->with('bottlenameRelation')->where(['productnames_productname'=>$catid])->asArray()->one();
echo Json::encode($bottle);
}
输出中的json将包含瓶名关系字段。
为了完整起见,您可以通过这种方式输出json,同时添加正确的HTTP标头:
public function actionGetForProduction($catid)
{
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$bottle = Productnames::find()->with('bottlenameRelation')->where(['productnames_productname'=>$catid])->asArray()->one();
return $bottle;
}