Yii2建立了许多关系

时间:2016-05-26 10:11:25

标签: yii2

Yii2构建关系多对多

我有2个表用户和朋友 tables

代码查询

$friends = Friends::find()
            ->select(['friends.user_id', 'users.name'])
            ->leftJoin('users','users.id = friends.friend_user')
            ->with('users')
            ->all();

结果错误

  

无效参数 - yii \ base \ InvalidParamException。 app \ models \ Friends没有名为“users”的关系。

1 个答案:

答案 0 :(得分:2)

Friends有一个名为user_id的列,因此只属于一个用户。如果您自动生成Friends ActiveRecord,它可能有一个函数getUser(单数,因为它只有一个),它看起来像这样:

public function getUser() {
    return $this->hasOne(User::className(), ['id' => 'user_id']);
}

因此,您没有收到错误,因为不存在getUsers函数(返回有效的ActiveQuery对象)。因为每个朋友只能有一个用户我认为你应该使用单数版本。如果仍然会出现相同的错误,您应该实现上面的函数,并且可能会更改它以匹配您的类名。

当您使用with(['relation'])加载关系时,Yii会将条目转换为getRelation并在模型上调用该函数以获取加载关系所需的查询。