2016-11-18 102 views
1

我有以下查詢想要轉換爲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 

回答

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

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'); 
     }) 
+0

如何添加 - > PAGINATE(10);到這個查詢。我嘗試添加 - > paginate(10);在最後但不工作。返回一個錯誤「'on子句'中的未知列't.rec_id'(SQL:select count(*)as'to_jobs'的集合左連接'to_sites' on'to_jobs'.'fk_site_id' ='to_sites'.'site_id '內部連接(SELECT rec_id FROM to_jobs LIMIT 299990,10)as t on't'.'rec_id'='to_jobs'.'rec_id')「 –

+0

@Alfizamalek但沒有paginate()查詢生成器不會產生錯誤? – Beginner

+0

不,我想添加paginate()。所以我問我如何可以添加到此查詢? –