2016-10-12 18:16:25 2159次浏览 5条回答 0 悬赏 50 金钱

表Medicine(id)、 dialectical(medicine_id)
我在dialectical模型中定义

public function getRel()
    {
        return $this->hasMany(MedicinesItem::className(), ['id' => 'medicine_id'])->asArray()->all();
    }

然后在controller调用

$rel = DialecticalMedicinesRel::find()->with('rel')->all();

然后发生了错误,我记得之前我这么写是完全正确的,这次不知道那个地方出了问题

补充于 2016-10-13 15:20

还是不对呀。
首先我先确定一下我的两个表的数据都存在的,而且照你们方法做了之后的打印截图
QQ截图20161013152019.jpg

  • 回答于 2016-10-13 08:16 举报

    getRel()方法里的->asArray()->all()是多余的

    觉得很赞
  • 回答于 2016-10-13 10:22 举报

    不要 加上 asArray()->all();

    如果你想要关联查询的话,应该使用 joinWith() 而不是 with()

  • 回答于 2016-10-13 14:31 举报
    • 首先你的关联方法写的不对,如一楼所说,不用加hasMany方法后需的接连操作,方法如下

      public function getRel()
      {
        return $this->hasMany(MedicinesItem::className(), ['id' => 'medicine_id'])->asArray()->all();
      }
      
    • 其次如二楼所说,你在后面调用时该使用joinwith()而非with(),代码如下

      $rel = DialecticalMedicinesRel::find()->joinwith('rel')->all();
      

    还有一个提示,就是你在getRel方法中用的是hasMany()这个方法,在这里你需要弄明白两张表中间的关系,个人认为应该是你的一个dialectical对象只能对应一个Medicine,所以应该是hasOne()这个方法。

    觉得很赞
  • 回答于 2016-10-14 13:18 举报
    • 我们的回答是针对于你的语法以及方法的使用所给出的答案,而你此刻能打印出结果,是否可以说明你的代码中使用的方法是没有错误的呢?
    • 接着你所给出的截图以及所说的错误并不能让我们知道你碰到的是什么错误,以及你想做什么。
  • 回答于 2016-10-18 09:35 举报

    我的理解是:你的两张表是一对多的关系,查询之后会生成一个中间表导致主表的记录会有重复!暂时没有想到解决办法,可以不使用hasmany(),查完通过foreach或者toarray再补全一下,菜鸟一枚,勿喷!

    1 条回复
    回复于 2016-10-18 10:02 回复

    后边加个分组groupBy(主表.id)

您需要登录后才可以回答。登录 | 立即注册
飒雅
助理

飒雅 北京

注册时间:2016-06-12
最后登录:2019-02-25
在线时长:11小时38分
  • 粉丝6
  • 金钱5
  • 威望0
  • 积分115

热门问题