Подзапрос в построителе запросов на Laravel

#mysql #sql #laravel

Вопрос:

Я хочу создать конструктор запросов с помощью этого запроса, но он не будет работать.

 SELECT
  karyawan.id,
  karyawan.nama_lengkap,
  departemen.nama,
  jabatan.nama,
  (
    SELECT
      tingkat
    FROM
      riwayat_pendidikan
    WHERE
      karyawan_id = karyawan.id
    ORDER BY
      tahun_selesai DESC
    LIMIT
      1
  ) AS pendidikan_terakhir
FROM
  karyawan
  INNER JOIN jabatan ON karyawan.jabatan_id = jabatan.id
  INNER JOIN departemen ON jabatan.departemen_id = departemen.id;
 

Хорошо это сделано с помощью этого конструктора запросов , спасибо, ребята, я использую это https://sql-to-laravel-builder.herokuapp.com/

 DB::table('karyawan')
        ->select('karyawan.id as id','karyawan.nama_lengkap as nama','departemen.nama as departemen'
        ,'jabatan.nama as jabatan','karyawan.jenis_kelamin','karyawan.nomor_hp_whatsapp','karyawan.status_pegawai',
        'karyawan.tanggal_mulai_bekerja','karyawan.tanggal_keluar_bekerja','karyawan.tanggal_akhir_kontrak',
        'karyawan.telepon_rumah','karyawan.telepon_kantor',
        DB::raw('(SELECT CONCAT(riwayat_pendidikan.tingkat," ", riwayat_pendidikan.jurusan)
        AS FIRSTNAME FROM riwayat_pendidikan WHERE karyawan_id = karyawan.id ORDER BY
        tahun_selesai DESC LIMIT 1 ) AS pendidikan_terakhir'))
        ->join('jabatan','karyawan.jabatan_id','=','jabatan.id')
        ->join('departemen','jabatan.departemen_id','=','departemen.id')
        ->where('departemen.nama','=','Staff')
        ->get();
 

Ответ №1:

 use IlluminateSupportFacadesDB;

DB::table('karyawan')
    ->join('jabatan', 'jabatan.id', '=', 'karyawan.jabatan_id')
    ->join('departemen', 'departemen.id', '=', 'jabatan.departemen_id')
    ->select([
        'karyawan.id',
        'karyawan.nama_lengkap',
        'departemen.nama',
        'jabatan.nama',
    ])
    ->addSelect([
        'pendidikan_terakhir' => DB::table('riwayat_pendidikan')
            ->select('tingkat')
            ->whereColumn('riwayat_pendidikan.karyawan_id', 'karyawan.id')
            ->orderByDesc('tahun_selesai')
            ->limit(1)
    ])->get();
 

Документация