我正在尝试创建一个关系查询以使用 Yii2 ActiveRecord 方法使用连接表。表收藏夹包含user_id和object_id列。该 col object_id链接到 user.id,col user_id链接到 user.id。这是 1 到 N 的关系。
我想创建这样的关系:user.id -> favorites.user_id &&favorites.object_id -> user.id。
class User extends ActiveRecord
{
public function getFavorites()
{
return $this->hasMany(Favorite::className(), ['user_id' => 'id' ]);
}
public function getFavoriteUsers()
{
return $this->hasMany($this::className(), ['user_id' => 'object_id', 'subject_id' => Subjects::PROFILE ])->via('favorites');
}
public function getFavoriteUsersViaTable()
{
return $this->hasMany($this::className(), ['user_id' => 'object_id', 'subject_id' => Subjects::PROFILE ])->viaTable('{{%favorites}}', ['object_id' => 'id']);
}
}
但是当我尝试获取最喜欢的用户时,我得到空。
/**
* relation user.id -> (1 to N) favotites.user_id
*
* @return Favorites[]|null
*/
public function getFavorites()
{
return $this->hasMany(Favorite::className(), ['user_id' => 'id' ]);
}
/**
* relation user.id -> (1 to N) { favotites.user_id | favorites.object_id } -> (1 to 1) user.id
*
* @return Users[]|null
*/
public function getFavoriteUsers()
{
return $this->hasMany(self::className(), ['id' => 'object_id'])->via('favorites');
}
public function _getFavoriteUsers()
{
return $this->hasMany(self::className(), ['id' => 'object_id'])
->viaTable(Favorite::tableName(), ['user_id' => 'id']);
}