yii hasOne 进行关联查询,查询指定的关联表的字段

yii 进行关联查询,只想查询关联表的某个字段,现在是这样写的图片描述

查询结果,查询多条数据,关联表上传用户字段无法显示
图片描述

单条数据关联表上传用户就可以进行显示
图片描述
现在用with进行的关联图片描述,hasOne不进行字段select的查询,关联字段的结果上传用户可以进行查询出来,加上select字段限制就出问题,有人碰见过这种情况吗?请多多指教

阅读 6.4k
2 个回答

with 关联的时候采用匿名函数查询
$query = self::find()

        ->select($fields)
        ->with(['building' => function ($query) {
            $query->select(['id']);
        }])

首答。最近在看yii2,我的看法,不知道对不对。

1、首先,hasOne()yii\db\ActiveRecord 的一个方法,而 select()yii\db\Query 的一个方法。而其实,hasOne 最后返回的是 yii\db\ActiveQueryInterface,所以还是可以调用select()
2、一个 AR 类关联一张数据表,每个 AR 对象对应表中的一行, AR对象的属性对应数据行的列。
3、所以你的 model 层只需要这么写:

 public function getAuthor()
    {
        return $this->hasOne(Admin::className(), ['id' => 'created_by']);
    }

然后你的 view 页面就可以把 name 当做这个返回值(对象)的一个属性。

['attribute' => 'authorName',
 'label' => '上传用户',
 'value' => 'author.username'],

4、 如果你一定要查询关联表的的指定字段,问题应该在这里:

摘自yii2的类手册。所以需要在select()里加入关联字段:

return $this->hasOne(Adminuser::className(), ['id' => 'created_by'])->select(['id','username']);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题