请问在ActiveRecord中如何获取中间表的字段(已自己解决) [ 2.0 版本 ]
表关系如上图:
在ProductCombo中已定义
/**
* 获取组合下面的产品
* @return \yii\db\ActiveQuery
*/
public function getProducts(){
return $this->hasMany(Product::className(), ['id' => 'product_id'])
->viaTable('product_combo_item', ['product_combo_id' => 'id']);
}
我查询时,可以获取到产品的信息,不清楚如何获取中间表的amount字段(属性)
--已解决,
我是用比较笨的方法,只好用yii执行Sql left join三个表的方式进行查询,然后再通过程序实现与with() 返回类似的数组结构。代码如下:
//将产品组合,中间表,产品的关系使用类似with()层级关系的格式进行存放
protected function getProductCombos(){
$query = new \yii\db\Query;
$query->select('c1.id as comboid,c1.price as price,c1.name,ci.amount,p.id,p.name as pname,p.price as pprice')
->from('product_combo c1')
->leftJoin('product_combo_item ci', 'c1.id = ci.product_combo_id')
->leftJoin('product p', 'p.id = ci.product_id');
$command = $query->createCommand();
$resp = $command->queryAll();
$productCombo = array();
foreach($resp as $key=>$value){
if(array_key_exists($value['comboid'],$productCombo)){
$temp = array(
'amount'=>$value['amount'],
'id'=>$value['id'],
'pname'=>$value['pname'],
'pprice'=>$value['pprice'],
);
array_push($productCombo[$value['comboid']]['products'],$temp);
}else{
$productCombo[$value['comboid']] = array(
'comboid'=>$value['comboid'],
'name'=>$value['name'],
'price'=>$value['price'],
'products'=>array(
array(
'amount'=>$value['amount'],
'id'=>$value['id'],
'pname'=>$value['pname'],
'pprice'=>$value['pprice'],
)
)
);
}
}
return $productCombo;
}
共 0 个回答
没有找到数据。
wakasann 广东中山
注册时间:2014-10-20
最后登录:2022-08-29
在线时长:129小时30分
最后登录:2022-08-29
在线时长:129小时30分
- 粉丝25
- 金钱44850
- 威望30
- 积分46440