Laravel 5.4 : 在模型中编写 SQL 查询
Laravel 5.4 : Writing SQL query in Model
我正在做一个小型 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 查询,然后将数据发送到视图。我的问题是,无论如何我可以在模型(而不是控制器)中编写查询,然后将结果发送到视图?我是 Laravel 的新手。请帮助。
当然,您完全可以将上述代码放入相关模型的方法中,然后调用该方法。但是,人们通常不会直接从他们的 View 调用 Model 方法。 Controller 应该 assemble View 需要的数据,因此,Controller 应该从 Model 中拉取数据,然后传递给 View。
例如:
MyModel.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;
}
}
Controller.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);
}
更新:
查看以上每条评论的修改。
我正在做一个小型 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 查询,然后将数据发送到视图。我的问题是,无论如何我可以在模型(而不是控制器)中编写查询,然后将结果发送到视图?我是 Laravel 的新手。请帮助。
当然,您完全可以将上述代码放入相关模型的方法中,然后调用该方法。但是,人们通常不会直接从他们的 View 调用 Model 方法。 Controller 应该 assemble View 需要的数据,因此,Controller 应该从 Model 中拉取数据,然后传递给 View。
例如:
MyModel.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;
}
}
Controller.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);
}
更新:
查看以上每条评论的修改。