2016-05-12 17:09:09 3207次浏览 0条回答 1 悬赏 100 金钱

20160512170517.png

表关系如上图:
在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;
}
    没有找到数据。
您需要登录后才可以回答。登录 | 立即注册
wakasann
副董事长

wakasann 广东中山

注册时间:2014-10-20
最后登录:2022-08-29
在线时长:129小时30分
  • 粉丝25
  • 金钱44850
  • 威望30
  • 积分46440

热门问题