【问题标题】:Laravel 5.4 : Writing SQL query in ModelLaravel 5.4:在模型中编写 SQL 查询
【发布时间】:2017-12-28 20:40:46
【问题描述】:

我正在开发一个小型 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 的新手。请帮忙。

【问题讨论】:

    标签: sql laravel model-view-controller laravel-5 laravel-query-builder


    【解决方案1】:

    当然,您完全可以将上述代码放入相关模型中的方法中,然后调用该方法。但是,通常不会直接从他们的视图中调用模型方法。 Controller 应该组装 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;
        }
    }
    

    控制器.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);
    
    }
    

    更新:

    根据评论查看上面的编辑。

    【讨论】:

    • 如何将变量传递给模型?例如,第一个查询中的变量 $job_id。
    猜你喜欢
    • 2017-11-28
    • 2021-10-15
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2016-04-01
    • 2017-11-18
    • 2016-03-24
    • 1970-01-01
    相关资源
    最近更新 更多