Laravel 5.4: Написание SQL-запроса в модели

Я работаю над небольшим проектом laravel, где я записываю все свои sql-запросы в контроллер, а затем отправляю данные в представление.

Это функция моего контроллера:

 public function view_all_applicants($job_id,$job_title)
    {

        $sql = DB::select("SELECT jm.`jobseeker_id`,jm.`jobseeker_name`,jm.`jobseeker_phone`,jm.`login_email`,jm.`jobseeker_coverletter`,jm.`jobseeker_cv`,
                  jm.`jobseeker_education`,jm.`jobseeker_experience`,jm.`jobseeker_linkedin`,aj.`cover_letter`,aj.`date_applied`
                  FROM `jobseeker_main` AS jm
                  JOIN `applicants_for_job` AS aj ON jm.`jobseeker_id`=aj.`jobseeker_id`
                  JOIN `job_details` AS jd ON jm.`jobseeker_id`=jd.`job_id`
                  WHERE aj.`job_id`=$job_id");

        $count = DB::select("SELECT COUNT(DISTINCT(aj.`afj_id`)) AS total FROM `jobseeker_main` AS jm
                             JOIN `applicants_for_job` AS aj ON jm.`jobseeker_id`=aj.`jobseeker_id`
                             JOIN `job_details` AS jd ON jm.`jobseeker_id`=jd.`job_id` WHERE aj.`job_id`=$job_id");

        foreach($count as $ss)
        {
            $data['total'] = $ss->total;
        }

        return view('company.applicants_for_job',$data,compact('sql'));     

    }

Как видите, здесь я выполняю два SQL-запроса, а затем отправляю данные в представления. Мой вопрос в том, есть ли где-нибудь, где я могу писать свои запросы в модели (вместо контроллера), а затем отправлять результат в представления? Я новичок в Ларавеле. Пожалуйста помоги.


person Ajmal Razeel    schedule 23.07.2017    source источник


Ответы (1)


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

Например:

МояМодель.php

class MyModel {


    public function getX($job_id) {
       $sql = DB::select("SELECT jm.`jobseeker_id`,jm.`jobseeker_name`,jm.`jobseeker_phone`,jm.`login_email`,jm.`jobseeker_coverletter`,jm.`jobseeker_cv`,
                  jm.`jobseeker_education`,jm.`jobseeker_experience`,jm.`jobseeker_linkedin`,aj.`cover_letter`,aj.`date_applied`
                  FROM `jobseeker_main` AS jm
                  JOIN `applicants_for_job` AS aj ON jm.`jobseeker_id`=aj.`jobseeker_id`
                  JOIN `job_details` AS jd ON jm.`jobseeker_id`=jd.`job_id`
                  WHERE aj.`job_id`=$job_id");

        return $sql;
    }

    public function getCount() {
       $count = DB::select("SELECT COUNT(DISTINCT(aj.`afj_id`)) AS total FROM `jobseeker_main` AS jm
                             JOIN `applicants_for_job` AS aj ON jm.`jobseeker_id`=aj.`jobseeker_id`
                             JOIN `job_details` AS jd ON jm.`jobseeker_id`=jd.`job_id` WHERE aj.`job_id`=$job_id");

        return $count;
    }
}

Контроллер.php

public function __construct(MyModel $model)
{
   $this->model = $model;
}

public function index(Request $request, $job_id) {

   $x = $this->model->getX($job_id);
   $count = $this->model->count();

   $data['x'] = $x;
   $data['count'] = $count;

   return view('company.applicants_for_job',$data);

}

ОБНОВИТЬ:

См. правки выше для каждого комментария.

person djt    schedule 23.07.2017
comment
Как я могу передать переменные в модель? Например, переменная $job_id в первом запросе. - person Ajmal Razeel; 23.07.2017