MYSQL-запрос в Laravel Eloquent ORM - PullRequest
       1

MYSQL-запрос в Laravel Eloquent ORM

0 голосов
/ 02 октября 2018

Эй, я новичок в использовании laravel, и у меня есть некоторые проблемы, когда мне нужно выполнить некоторые запросы с помощью красноречивого ORM.

У меня есть следующие таблицы: Internship, Student и internship_student (посещаемость).

Моя сводная таблица имеет атрибут посещаемости (отсутствует или присутствует), и мне нужен идентификатор стажировки и подсчитываю количество студентов, присутствующих для каждой стажировки.

У меня есть необработанный запрос, но я хочу узнать, какя могу сделать это с помощью инструментов, которые предоставляет laravel.

Вот мой необработанный запрос:

DB::table('internship_student')
        ->select(DB::raw('count(*) as real_assistants, internship_id'))
        ->where('attendance', '=', 1)
        ->groupBy('internship_id')
        ->get();

1 Ответ

0 голосов
/ 02 октября 2018

Исходя из вашего запроса, я предполагаю, что у вас есть Many to Many отношение между Internship и Student.Исходя из этого, ваши модели должны выглядеть следующим образом:

Модель стажировки :

public function students() {
  return $this->belongsToMany('App\Student')->withPivot('attendance');
}

Модель студента :

public function internships() {
  return $this->belongsToMany('App\Internship')->withPivot('attendance');
}

При этом вы должны иметь возможность звонить с красноречивыми моделями:

count($internship->students()->where('attendance', '=', 1)->get());

ИЛИ, используя Mutator, вы можете создать собственный атрибут для получения количества посещений:

public function getRealAssistantsAttribute() {
   return $this->students()->where('attendance', '=', 1)->get();
}

//On an Internship instance
count($internship->real_assistants);

РЕДАКТИРОВАТЬ :

Один из последних способов использования Eager Загрузка будет выглядеть примерно так:

$internships = Internship::withCount([
  'students as real_attendants' => function($query) {
     $query->where('attendance', '=', 1);
  }
])->get();

Вы можете получить к нему доступ, используя:

$internships[0]->real_attendants_count;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...