Yii2.0 中间表查询

yii2 中,中间表查询实现,是通过via 与 viaTable实现的。个人认为实现原理是一样的。
前提:
user表 id
course-enrollment表 course_id, user_id
course表 id
要求:在course模型中实现查询:代码如下:

via()函数:

via() public method

//定义relation
public function getEnrollments(){
    return $this->hasMany(VCourseEnrollment::className(), ['course_id' => 'id']);
}

//实现查询
public function getStudents(){
    return $this->hasMany(VUser::className(), ['id' => 'user_id'])
        ->via('enrollments')
}

viaTable()函数:

//viaTable,指定中间表及关联字段
public function getStudents(){
    return $this->hasMany(VUser::className(), ['id' => 'user_id'])
        ->viaTable('vw_course_enrollment', ['course_id' => 'id']);
}

在某些情况下,如果还需要添加过滤字段,方法如下:

public function getStudents(){
    return $this->hasMany(VUser::className(), ['id' => 'user_id'])
        ->viaTable('vw_course_enrollment', ['course_id' => 'id'], function ($query){
        $query->onCondition(['enroll_at' => 0]);
        });
}

你可能感兴趣的:(Yii2.0,后端开发,数据库操作,MYSQL技术分享)