简体   繁体   中英

Change mysql query to laravel eloquent query builder

I have a Mysql query that need to be change to laravel eloquent query. I'm beginner in this. Need some help to convert this or a good reference for this. I read the documentation provided by laravel, but it's not enough. What i'm tryin to achieve is get the latest data for each id_nama_ruang

So mysql query :

 select * from tb_ruang_tt t
 inner join (
 select id_nama_ruang, max(tgl_pengubahan) as MaxDate
 from tb_ruang_tt
 group by id_nama_ruang
 ) tm on t.id_nama_ruang = tm.id_nama_ruang and t.tgl_pengubahan = tm.MaxDate

I tried to use this on Laravel :

$data = DB::select('select * from tb_ruang_tt t
inner join (
select id_nama_ruang, max(tgl_pengubahan) as MaxDate
from tb_ruang_tt 
group by id_nama_ruang) tm on t.id_nama_ruang = tm.id_nama_ruang and t.tgl_pengubahan = tm.MaxDate');

It works but my problem is i can't call my Relationship function on model. So i need something like this:

$data = ruang_tt::select();

instead of using $data = DB::select() ;

Please help, any help and pointer is appreciated.

So after many try, I use subquery like this :

$latestRuang = ruang_tt::select('id_nama_ruang', \DB::raw('MAX(tgl_pengubahan) as MaxDate'))->groupBy('id_nama_ruang');
$data = ruang_tt::from('tb_ruang_tt as t')->joinSub($latestRuang, 'latest_ruang', function ($join) {
    $join->on('latest_ruang.id_nama_ruang', '=', 't.id_nama_ruang')->on('latest_ruang.MaxDate', '=', 't.tgl_pengubahan');
    })->get();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM