2015-07-29 08:37:28 5263次浏览 1条回答 0 悬赏 10 金钱

我有3张表,一张商品表,一张店面表,一张店面_商品关系表,是这样的:

商品表(商品编号,商品名称,商品规格,商品图片,商品简介)
店面表(店面编号,店面名称,店面状态,店面公告)
店面_商品关系表(店面编号,商品编号,售价,库存,商品状态)

而我根据‘店面编号’,想得到:商品编号,商品名称,商品规格,商品图片,商品简介,售价,库存,商品状态。所以只需要查2张表就行了。

然后原生的sql:

SELECT 店面_商品关系表.商品编号,商品名称,商品规格,商品图片,商品简介,售价,库存,商品状态 FROM 店面_商品关系表 LEFT JOIN 商品表 ON(店面_商品关系.商品编号=商品表.商品编号) WHERE 店面编号={$mallid}

换成joinWith不明白的地方:

$rs=MallToGoods::findBySql("SELECT `GoodsID`,`GoodsPrice`,`GoodsNum`,`GoodsState` FROM `malltogoods` WHERE `MallID`={$mallid}")->joinWith('goodslist','true','LEFT JOIN')->asarray()->all();
return $rs;

这样子能把malltogoods表里的GoodsID,GoodsPrice,GoodsNum,GoodsState都查出来,可是查不出'goodslist'表里的,后来我尝试把 ‘商品名称,商品规格,商品图片,商品简介’都写到select里头,它会报错在 店面_商品关系表 里没有这些列。所以我不明白我要怎么同时让2个表里要查的都显示在一起。看了文档上的 活动记录->中间关联表:

有时,两个表通过中间表关联,定义这样的关联关系, 可以通过调用 yii\db\ActiveQuery::via() 方法或 yii\db\ActiveQuery::viaTable() 方法来定制 yii\db\ActiveQuery 对象 。
举例而言,如果 order 表和 item 表通过中间表 order_item 关联起来,可以在 Order 类声明 items 关联关系取代中间表:

class Order extends \yii\db\ActiveRecord
{
    public function getItems()
    {
        return $this->hasMany(Item::className(), ['id' => 'item_id'])
            ->viaTable('order_item', ['order_id' => 'id']);
    }
}

所以我想也应该在我的model中添加关联。
可是 店面和商品间是多对多的关系,一个店面下可以有多个商品,一个商品可以在多个店面下。我要添加怎么样的关联,而‘店面_商品关系表’和‘店面表’存在关系吗?还是说我的表设计的不合理?我不明白了,简单的说就是不明白原生的sql怎么改到这上面去。

  • 回答于 2015-07-29 09:16 举报

    其实你如果想查店面的商品,是应该在店面的模型里做关联查询的~参考:

    class Mall extends \yii\db\ActiveRecord
    {
    
        public function getGoodses()
        {
            return $this->hasMany(Goods::className(), ['id' => 'goods_id'])
                ->viaTable('MallToGoods', ['mall_id' => 'id']);
        }
    
    }
    
    2 条回复
    回复于 2015-07-29 09:24 回复

    然后查询某店商品用:

    $mall=Mall::findOne($id);
    
    //使用时:
    $goodses=$mall->goodses();
    foreach ($goodses as $goods) {
                ....
      }
    
    回复于 2015-07-29 09:40 回复

    恩恩,先谢谢你啦。那是不是还是还是不能一起查出来,就是 每个店面对同样商品,卖的价格是不一样的,所以就是我想要在显示商品的同时也要知道在这个店面,这个商品的售价,而售价又不能放在商品表里。这可怎么办呢?好疑惑。

    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
阿星
见习主管

阿星

注册时间:2015-07-20
最后登录:2017-01-18
在线时长:7小时1分
  • 粉丝5
  • 金钱245
  • 威望0
  • 积分315

热门问题