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”的关系。
答案 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
并在模型上调用该函数以获取加载关系所需的查询。