繁体   English   中英

从2个表中获取数据的最佳Yii方法是什么?

[英]What's the best Yii way of getting data from 2 tables?

我想基于2个数据库表获取数据

有:

 course table
 student_in_course table (with foreign key course_id)

我想获得所有的course.name

基于student_in_course.course_idstudent_in_course.student_id

使用ActiveRecord(或其他推荐方式)执行此操作的最佳做​​法是什么?

提前致谢

首先,如果您要使用YII,ActiveRecord是最好的方法,似乎您将要使用交叉引用表使用via()viaTable()

class Student extends ActiveRecord{

     public function getStudentsInCourses() {
          return $this->hasMany(StudentInCourses::className(), ['student_id' => 'id']);
      }

     public function getCourses() {
          return $this->hasMany(Course::className(), ['id' => course_id'])
                   ->via('studentsInCourses');
     }
}

Yii2文档建议使用'joinWith',以防您需要对Active Record执行左联接查询。 因此,在您的情况下,您需要这样的东西:

$courses = Course::find()
  ->select('course.name')
  ->joinWith('student_in_course')
  ->where(['student_in_course.student_id' => $student_id])
  ->all();

请参考Yii2官方文档

是的, ActiveRecord是我更喜欢的方法,但是事情是,如果您打算在activeDataProvider时候使用activeDataProviderGridViewListView显示,则可能需要在serachModel中更新/调整查询,而不是在查询中编写单独的函数model或某些人确实在控制器的动作中编写的方法,直到除非您使用自定义视图并手动显示它,并希望结果集作为arrayactivedataprovider对象在其上进行迭代并显示记录,然后@GiulioG建议答案适用。 但是,在这两种情况下都需要注意的是,您应该定义适当的relations并且不需要手动使用joins

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM