Yii2建立多对多关系

Yii2建立多对多关系,yii2,Yii2,Yii2建立多对多关系 我有两个表,用户和朋友 代码查询 $friends = Friends::find() ->select(['friends.user_id', 'users.name']) ->leftJoin('users','users.id = friends.friend_user') ->with('users') ->all(); 结果误差 无效参数–

Yii2建立多对多关系

我有两个表,用户和朋友

代码查询

$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”的关系


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

public function getUser() {
    return $this->hasOne(User::className(), ['id' => 'user_id']);
}
因此,之所以出现错误,是因为不存在
getUsers
函数(返回有效的ActiveQuery对象)。因为每个朋友只能有一个用户,所以我认为您应该使用单数版本。如果仍然出现同样的错误,您应该实现上面的函数,并可能对其进行一些更改以匹配您的类名


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

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

public function getUser() {
    return $this->hasOne(User::className(), ['id' => 'user_id']);
}
因此,之所以出现错误,是因为不存在
getUsers
函数(返回有效的ActiveQuery对象)。因为每个朋友只能有一个用户,所以我认为您应该使用单数版本。如果仍然出现同样的错误,您应该实现上面的函数,并可能对其进行一些更改以匹配您的类名


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

没有错误,但我无法访问与行相关的表OK。为了访问视图中的数据,我使用$all\u friend->friendUser->nameNo errors,但我不访问与行相关的表OK。为了访问视图中的数据,我使用$all\u friend->friendUser->name