/** * Membuat query untuk fungsi print. */ public static function print_surat($input) { // sanitize page dan limit jika diinput secara manual $limit = is_numeric((int) $input['limit']) && $input['limit'] > 0 ? (int) $input['limit'] : Konfigurasi::find(7)->config_value; $page = is_numeric((int) $input['page']) && $input['page'] > 0 ? (int) $input['page'] : 1; // query pertama hanya mendapatkan id-nya saja, // ---query BELUM diexecute--- $qry = Suratkeluar::order_by('id', 'desc')->where('jenis_surat', 'LIKE', Suratkeluar::clean_id_jenis($input['jenis']))->where('pengirim', 'LIKE', Suratkeluar::clean_id_pengirim($input['pengirim']))->where('nomor_urut', 'LIKE', '%' . $input['nomor'] . '%')->where('kode_surat', 'LIKE', '%' . $input['kode'] . '%')->where('tahun', 'LIKE', '%' . $input['tahun'] . '%')->where('tgl_surat', 'LIKE', '%' . $input['tanggal'] . '%')->where('tujuan', 'LIKE', '%' . $input['tujuan'] . '%')->where('hal', 'LIKE', '%' . $input['hal'] . '%'); // Cek apakah user mencoba mengakses page secara manual, lebih dari max page // // mengexecute query $qry di atas untuk mendapatkan total records yg didapat $total_records = $qry->count(); // rounding up untuk max page, misal total = 15, limit = 7, // maka max page = 2.14 -> round up menjadi 3 $max_page = ceil($total_records / $limit); // jika page diinput manual dan melebihi maxpage, maka diset ke max page $page = $page > $max_page ? $max_page : $page; // karena menggunakan pagination, maka rows yg diambil harus sesuai pagenya $skipped = ($page - 1) * $limit; // mengexecute query $qry di atas untuk mendapatkan recordsnya $rows = $qry->skip($skipped)->take($limit)->get(); // menyusun id dari query pertama ke dalam array // karena akan disort ulang, records yg didapat hanya diambil id-nya saja $id_array = array(); foreach ($rows as $r) { $id_array = array_merge($id_array, array($r->id)); } // query kedua mengambil row surat dgn order_by jenis_surat lalu nomor_urut $sk = Suratkeluar::where_in('id', $id_array)->order_by('tahun')->order_by('jenis_surat')->order_by('nomor_urut')->get(); return $sk; }