【问题标题】:Yii2 hasMany() and via() or viaTable() activeRecord methods syntaxYii2 hasMany() 和 via() 或 viaTable() activeRecord 方法语法
【发布时间】:2016-02-17 16:39:10
【问题描述】:

我正在尝试使用 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']);
}


}

但是当我试图获取最喜欢的用户时,我得到了 null。

【问题讨论】:

    标签: activerecord yii2


    【解决方案1】:
       /**
         * 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']);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      相关资源
      最近更新 更多