将子查询转换为laravel子查询

时间:2016-11-18 07:49:03

标签: mysql laravel

我有以下查询想要转换为laravel子查询。

    SELECT to_jobs.rec_id,to_jobs.contarct_code, to_jobs.job_num , to_sites.site_name, to_sites.postcode, to_sites.site_id 
      FROM to_jobs
 LEFT JOIN to_sites   
        ON to_jobs.fk_site_id = to_sites.site_id
      JOIN (SELECT rec_id
              FROM to_jobs 
             LIMIT 299990, 10) AS t ON t.rec_id = to_jobs.rec_id

2 个答案:

答案 0 :(得分:3)

相当于

    SELECT to_jobs.rec_id,to_jobs.contarct_code, to_jobs.job_num , to_sites.site_name, to_sites.postcode, to_sites.site_id 
      FROM to_jobs

到laravel是

DB::table('to_jobs')
    ->select(array(
      'to_jobs.rec_id',
      'to_jobs.contarct_code',
      'to_jobs.job_num',
      'to_sites.site_name',
      'to_sites.postcode',
      'to_sites.site_id' 
     ))

相当于

   LEFT JOIN to_sites   
          ON to_jobs.fk_site_id = to_sites.site_id

进入laravel是

->leftJoin('to_sites', 'to_jobs.fk_site_id', '=', 'to_sites.id')

等同于

   JOIN (SELECT rec_id 
           FROM to_jobs 
          LIMIT 299990, 10) AS t 
             ON t.rec_id = to_jobs.rec_id

进入laravel是

->join(DB::raw('(SELECT rec_id FROM   to_jobs LIMIT  299990, 10) AS t'), function($join) {
            $join->on('t.rec_id ', '=', 'to_jobs.rec_id');
        })

所以你的查询构建器就像这样

DB::table('to_jobs')
    ->select(array(
        'to_jobs.rec_id',
        'to_jobs.contarct_code',
        'to_jobs.job_num',
        'to_sites.site_name',
        'to_sites.postcode',
        'to_sites.site_id' 
        ))
    ->leftJoin('to_sites', 'to_jobs.fk_site_id', '=', 'to_sites.id')
    ->join(DB::raw('(SELECT rec_id FROM   to_jobs LIMIT  299990, 10) AS t'), function($join) {
            $join->on('t.rec_id ', '=', 'to_jobs.rec_id');
        })

答案 1 :(得分:0)

我认为你的代码应该是这样的,当你需要子查询时你应该使用函数.. 我告诉你一个例子......

Products::whereIn('id', function($query){
    $query->select('paper_type_id')
    ->from(with(new ProductCategory)->getTable())
    ->whereIn('category_id', ['223', '15'])
    ->where('active', 1);
})->get(); 

参考:: Laravel 5.0 subquery example