我有以下查询想要转换为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 :(得分: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();