美文网首页
YII2 订单功能 jionwith 多表嵌套关联

YII2 订单功能 jionwith 多表嵌套关联

作者: Mr_敬zZ | 来源:发表于2017-07-23 15:12 被阅读0次

    order表 ordergoods表 goods表 merchant加盟商

    order 与ordergoods 通过 order_id字段关联:
    ordergoods与goods表通过goods_id 和id关联:
    goods与merchant表通过merchant_id 和id关联

    在order表 model里 建立关联
    public function getOrderGoods()
    {
    return $this->hasMany(OrderGoods::className(), ['order_id' => 'order_id']);//一个order关联多个ordergoods
    }

    ordergoods与goods表通过goods_id 和id关联:
    在ordergoods表model里 建立关联
    public function getGoods()
    {
    return $this->hasOne(Goods::className(), ['id' => 'goods_id'])->select(['lb_goods.id','lb_goods.picture','merchant_id','merchant_name'])->joinwith(['merchant'],false);//一个ordergoods关联一个goods(并通过joinwith关联merchant加盟商表)lb_goods 需要写表前缀 不然无法识别id是哪个表的
    }

    goods与merchant表通过merchant_id 和id关联:
    在goods表merchant里 建立关联
    public function getMerchant()
    {
    return $this->hasOne(Merchant::className(), ['merchant_id' => 'id']);//一个goods关联一个merchant;
    }

    在controller引用时:
    $orderinfos = OrderInfo::find()
    ->joinWith(
    ['orderGoods'=>function($query){
    $query->joinWith(['goods']);//ordergoods关联goods表(goods表已经在getGoods()方法关联merchant加盟商表)
    }]
    )
    ->where('添加条件')
    ->all()

    总结 : 在controller通过joinwith内回调 order表可以查询goods表
    goods表 getGoods()方法内joinwith回调 可以查询merchant加盟商表

    相关文章

      网友评论

          本文标题:YII2 订单功能 jionwith 多表嵌套关联

          本文链接:https://www.haomeiwen.com/subject/sglmkxtx.html