我想基于2个数据库表获取数据
有:
if ($this->form_validation->run())
{
$this->session->set_flashdata('message', 'We got your submitted user : '.$data.' username');
}
我想获得所有 course table
student_in_course table (with foreign key course_id)
基于course.name
对于特定的student_in_course.course_id
使用ActiveRecord(或其他推荐方式)进行此操作的最佳做法是什么?
提前致谢
答案 0 :(得分:3)
首先,如果你打算使用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');
}
}
答案 1 :(得分:0)
Yii2文档建议使用'joinWith',以防您需要使用Active记录执行左连接查询。所以在你的情况下你会想要这样的东西:
$courses = Course::find()
->select('course.name')
->joinWith('student_in_course')
->where(['student_in_course.student_id' => $student_id])
->all();
答案 2 :(得分:0)
是的,ActiveRecord
是我更喜欢这样做的,但问题是,如果您打算使用GridView
ListView
或activeDataProvider
展示需要在serachModel中更新/调整查询,而不是在model
中编写一个单独的函数或者在控制器的操作中写一些人,直到除非您使用自定义视图并手动显示它并且想要结果集作为array
或activedataprovider
对象进行迭代并显示记录,然后@GiulioG
建议的答案适用。但在这两种方案中要注意的是,您应该定义适当的relations
,而不需要手动使用joins
。