Какой лучший способ Yii получить данные из 2 таблиц?

Я хочу получить данные на основе таблиц 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 (или другим рекомендуемым способом)?

заранее спасибо

0

Решение

Документация Yii2 предлагает использовать joinWith, если вам нужно выполнить запрос левого соединения с активной записью. Так что в вашем случае вы хотели бы что-то вроде этого:

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

Пожалуйста, обратитесь к Yii2 официальные документы.

0

Другие решения

Прежде всего, 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');
}
}
3

Да, ActiveRecord это то, что я предпочел бы сделать это, но дело в том, если вы собираетесь отображать в GridView или же ListView с помощью activeDataProvider иногда вам может потребоваться обновить / настроить запрос в serachModel, а не писать отдельную функцию с запросом в model или как некоторые люди пишут внутри действия контроллера, до тех пор, пока вы не используете пользовательское представление и отображаете его вручную и хотите, чтобы результат был установлен как array или же activedataprovider объект для итерации и отображения записей, а затем ответ, предложенный @GiulioG применимо. Но в обоих сценариях следует отметить, что вы должны определить relations и вам не нужно использовать joins вручную.

0
По вопросам рекламы [email protected]