yii2能在一个查询结果中显示2张表中的字段吗?就像原生的sql用LEFT JOIN这种,yii里的joinWith怎么不行?

我有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怎么改到这上面去。


hello_world_
浏览 8095回答 0
0回答
打开App,查看更多内容
随时随地看视频慕课网APP