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