Я хочу получить данные на основе таблиц 2 дБ
Есть:
course table
student_in_course table (with foreign key course_id)
Я хотел бы получить все course.name
основанный на student_in_course.course_id
для конкретного student_in_course.student_id
Как лучше всего делать это с ActiveRecord (или другим рекомендуемым способом)?
заранее спасибо
Документация Yii2 предлагает использовать joinWith, если вам нужно выполнить запрос левого соединения с активной записью. Так что в вашем случае вы хотели бы что-то вроде этого:
$courses = Course::find()
->select('course.name')
->joinWith('student_in_course')
->where(['student_in_course.student_id' => $student_id])
->all();
Пожалуйста, обратитесь к Yii2 официальные документы.
Прежде всего, ActiveRecord — лучший подход, если вы собираетесь работать с YII, похоже, вы собираетесь использовать таблицу перекрестных ссылок 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');
}
}
Да, ActiveRecord
это то, что я предпочел бы сделать это, но дело в том, если вы собираетесь отображать в GridView
или же ListView
с помощью activeDataProvider
иногда вам может потребоваться обновить / настроить запрос в serachModel, а не писать отдельную функцию с запросом в model
или как некоторые люди пишут внутри действия контроллера, до тех пор, пока вы не используете пользовательское представление и отображаете его вручную и хотите, чтобы результат был установлен как array
или же activedataprovider
объект для итерации и отображения записей, а затем ответ, предложенный @GiulioG
применимо. Но в обоих сценариях следует отметить, что вы должны определить relations
и вам не нужно использовать joins
вручную.