为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

hello_world_ 2015-07-29 12:40:00
我有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怎么改到这上面去。
查看完整描述

目前暂无任何回答

  • 0 回答
  • 0 关注
  • 8094 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信