2张表中都有我要查找的,我想让要查找的都显示出来,我用joinWith为什么只能查到一张表的? [ 2.0 版本 ]
我有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怎么改到这上面去。
共 1 个回答
-
其实你如果想查店面的商品,是应该在店面的模型里做关联查询的~参考:
class Mall extends \yii\db\ActiveRecord { public function getGoodses() { return $this->hasMany(Goods::className(), ['id' => 'goods_id']) ->viaTable('MallToGoods', ['mall_id' => 'id']); } }
共 2 条回复strive 觉得很赞
阿星
注册时间:2015-07-20
最后登录:2017-01-18
在线时长:7小时1分
最后登录:2017-01-18
在线时长:7小时1分
- 粉丝5
- 金钱245
- 威望0
- 积分315