Sulhi.id

Catatan Kecil Seputar Blogging dan Koding

Membuat Pendaftaran Siswa Baru (PSB) dengan Laravel (Bagian Keempat)

Sunday, December 16th, 2018     Laravel

Pada tutorial bagian akhir PSB Online ini kita akan mempelajari dua hal, yaitu:

  1. Bagaimana memodifikasi Form Pendaftaran dengan menambahkan field atau kolom isian serta mengupload image atau file dokumen yang dipersyaratkan ketika calon siswa melakukan pendaftaran.
  2. Memodifikasi Dashboard Pendaftar untuk menampilkan biodata calon siswa serta menampilkan seluruh data pendaftar pada dashboard Admin.

Menambah Kolom Isian Form Pendaftaran

Pada form isian pendaftaran ada data yang perlu ditambahkan dan lupa ketika awal membuat schema tabel database. Misalnya kita ingin mengetahui jenis asal sekolah dari calon siswa, apakah berasal dari SMP ataukah MTs, kemudian kita juga ingin ada foto dari calon siswa untuk keperluan cetak form pendaftaran. Bagaimana cara mengatasi kedua masalah tersebut? Baiklah, mari kita bahas dengan langkah-lengkah berikut:

1. Mengedit Table Biodata

Langkah pertama kita harus menambahkan dua kolom pada tabel Biodata, yaitu kolom untuk upload foto calon siswa dengan nama kolom url_foto   yang bertipe text. Sementara untuk  jenis asal sekolah karena hanya ada 2 pilihan yaitu SMP dan MTs, maka digunakan  kolom dengan tipe enum.

$table->text('url_foto')->nullable();
$table->enum('jenis_sekolah', ['SMP', 'MTs'])->nullable();

Parameter nullable() artinya kolom isian tersebut boleh kosong atau tidak diinput data.

database/migrations/2018_12_06_094815_create_biodatas_table.php

Buka dan edit file migrasi biodata, sehingga keseluruhan kode akan seperti berikut:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateBiodatasTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('biodata', function (Blueprint $table) {
            $table->increments('id');
            $table->string('nama', 100);    
            $table->string('nis', 45);    
            $table->string('tempat_lahir', 45);    
            $table->date('tanggal_lahir');    
            $table->string('nem', 45);    
            $table->string('no_ijazah', 45);    
            $table->string('nama_ortu', 100);    
            $table->string('pekerjaan_ortu', 100);    
            $table->string('telp', 45);    
            $table->longText('alamat'); 
            $table->text('url_foto')->nullable();
            $table->enum('jenis_sekolah', ['SMP', 'MTs'])->nullable();
            $table->timestamps();

            $table->integer('user_id')->unsigned();   
            $table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade'); 

        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('biodata');
    }
}

Selanjutnya adalah menjalankan migrasi, tapi sebelumnya kita lakukan rollback terlebih dahulu, kemudian migrasi kembali dan jalankan seeding untuk meng-insert data admin.

E:\MyProject\PSB-Online>php artisan migrate:rollback
Rolling back: 2018_12_06_094815_create_biodatas_table
Rolled back:  2018_12_06_094815_create_biodatas_table
Rolling back: 2014_10_12_100000_create_password_resets_table
Rolled back:  2014_10_12_100000_create_password_resets_table
Rolling back: 2014_10_12_000000_create_users_table
Rolled back:  2014_10_12_000000_create_users_table

E:\MyProject\PSB-Online>php artisan migrate
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table
Migrating: 2018_12_06_094815_create_biodatas_table
Migrated:  2018_12_06_094815_create_biodatas_table

E:\MyProject\PSB-Online>php artisan db:seed
Seeding: UsersTableSeeder
Seeding: BiodataTableSeeder
Database seeding completed successfully.

2. Mengedit File RegisterController.php 

Buka file RegisterController.php dan tambahkan kode berikut tepat di atas kode  $biodata->save();

        $biodata->jenis_sekolah = Input::get('jenis_sekolah');
        if($file = $request->hasFile('url_foto')) 
        {
            $namaFile = Auth::user()->email;
            $file = $request->file('url_foto') ;
            $fileName = $namaFile.'_'.$file->getClientOriginalName() ;
            $destinationPath = public_path().'/images/' ;
            $file->move($destinationPath,$fileName);
            $dosen->url_foto = $fileName ;
        }

Kode baris ke-1 untuk menyimpan ke kolom jenis_sekolah berdasarkan data yang diinput oleh pendaftar. Sementara baris kode ke-2 sampai ke-10 digunakan untuk upload file/image dan disimpan ke folder images serta menyimpan data nama file ke kolom url_foto. Oleh karena itu kita juga harus memuat folder images pada folder public.

Selain membuat folder images, kita juga harus memanggil class untuk upload file pada RegisterController.php

use Illuminate\Support\Facades\File;

Sehingga keseluruhan kode file RegisterController.php seperti kode di bawah ini.

app/Http/Controllers/Auth/RegisterController.php

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Biodata;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }


    /**
     * Show the application registration form.
     *
     * @return \Illuminate\Http\Response
     */
    public function showRegistrationForm()
    {
        $biodata = Biodata::all();

        return view('auth.register', compact('biodata'));
    }

   
    /**
     * Handle a registration request for the application.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */


    public function register(Request $request)
    {

        $validator = Validator::make($request->all(), 
        [
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
            'nama' => 'required|string|max:255',
            'nis' => 'required|string|max:45',
            'tempat_lahir' => 'required|string|max:45',
            'tanggal_lahir' => 'required',
            'nem' => 'required|string|max:45',
            'no_ijazah' => 'required|string|max:45',
            'nama_ortu' => 'required|string|max:100',
            'pekerjaan_ortu' => 'required|string|max:100',
            'telp' => 'required|string|max:45',
            'alamat' => 'required',
            'url_foto' => 'mimes:pdf,jpeg,png,jpg|max:2048',

        ],

        $messages = 
        [
            'email.required' => 'E-Mail tidak boleh kosong !',
            'password.required' => 'Password tidak boleh kosong',
            'nama.required' => 'Nama tidak boleh kosong!',
            'nis.required' => 'Nama tidak boleh kosong!',
            'tempat_lahir.required' => 'Nama tidak boleh kosong!',
            'tanggal_lahir.required' => 'Nama tidak boleh kosong!',
            'nem.required' => 'Nama tidak boleh kosong!',
            'no_ijazah.required' => 'Nama tidak boleh kosong!',
            'nama_ortu.required' => 'Nama tidak boleh kosong!',
            'pekerjaan_ortu.required' => 'Nama tidak boleh kosong!',
            'telp.required' => 'Nama tidak boleh kosong!',
            'alamat.required' => 'Nama tidak boleh kosong!',
            'url_foto.image' => 'Format file tidak mendukung! Gunakan jpg, jpeg, png, gif atau pdf.',
            'url_foto.max' => 'Ukuran file terlalu besar, maksimal file 2Mb !',


        ]);     

        if($validator->fails())
        {
        return back()->withErrors($validator)->withInput();  
        }

        //Table Users
        $user = new User;
        $user->email = Input::get('email');
        $user->password = Hash::make(Input::get('password'));
        $user->level = 1;
        $user->save();

        //Table Biodata 
        $user_id = $user->id;
        $biodata = new Biodata;
        $biodata->user_id = $user_id;
        $biodata->nama = Input::get('nama');
        $biodata->nis = Input::get('nis');
        $biodata->tempat_lahir = Input::get('tempat_lahir');
        $biodata->tanggal_lahir = Input::get('tanggal_lahir');
        $biodata->nem = Input::get('nem');
        $biodata->no_ijazah = Input::get('no_ijazah');
        $biodata->nama_ortu = Input::get('nama_ortu');
        $biodata->pekerjaan_ortu = Input::get('pekerjaan_ortu');
        $biodata->telp = Input::get('telp');
        $biodata->alamat = Input::get('alamat');
        $biodata->jenis_sekolah = Input::get('jenis_sekolah');
        if($file = $request->hasFile('url_foto')) 
        {
            $namaFile = $user->id;
            $file = $request->file('url_foto') ;
            $fileName = $namaFile.'_'.$file->getClientOriginalName() ;
            $destinationPath = public_path().'/images/' ;
            $file->move($destinationPath,$fileName);
            $biodata->url_foto = $fileName ;
        }
        $biodata->save();
     

        return redirect()->back()->with('success', 'Registrasi Anda telah berhasil!. Silakan login dengan menggunakan email dan password Anda.');
    }


}

Baris kode ke-88, merupakan kode validasi untuk membatasi file yang diupload harus bertipe pdf, jpg dan png dengan ukuran maksimal file sebesar 2Mb. Sementara baris kode ke-106 dan 107 digunakan untuk menampilkan pesan errors jika file yang diupload tidak sesuai dengan ketentuan pada validator.

3. Mengedit File register.blade.php 

Sebelum menambahkan kolom isian untuk jenis_sekolah dan url_foto, tambahkan terlebih dahulu kode enctype="multipart/form-data" pada tag form. Kode tersebut diperlukan karena ada inputan berupa file/image.

<form method="POST" action="{{ route('register') }}" enctype="multipart/form-data">

Selanjutnya tambahkan tag html untuk input jenis_sekolah

<div class="form-group row">
    <label for="jenis_sekolah" class="col-md-4 col-form-label text-md-right">{{ __('Jenis Asal Sekolah') }}</label>
    <div class="col-md-7">
        <div class="custom-control custom-radio custom-control-inline mt-2">
            <input type="radio" id="customRadioInline1" name="jenis_sekolah" class="custom-control-input" value="SMP">
            <label class="custom-control-label" for="customRadioInline1">SMP</label>
        </div>
        <div class="custom-control custom-radio custom-control-inline">
            <input type="radio" id="customRadioInline2" name="jenis_sekolah" class="custom-control-input" value="MTs">
            <label class="custom-control-label" for="customRadioInline2">MTs</label>
        </div>
    </div>
</div>

Tag html untuk input foto

<div class="form-group row">
    <label for="url_foto" class="col-md-4 col-form-label text-md-right">{{ __('Upload Foto') }}</label>
    <div class="col-md-7">
        <input id="url_foto" type="file" class="form-control{{ $errors->has('url_foto') ? ' is-invalid' : '' }}" name="url_foto" value="{{ old('url_foto') }}" required autofocus>

        @if ($errors->has('url_foto'))
            <span class="invalid-feedback" role="alert">
                <strong>{{ $errors->first('url_foto') }}</strong>
            </span>
        @endif
    </div>
</div>

 

Keseluruhan kode file resources/views/auth/register.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-9">
            <div class="card">
                <div class="card-header">{{ __('Form Pedaftaran PSB') }}</div>

                <div class="card-body">

                    @if(session()->has('success'))
                        <div class="alert alert-success">{{ session()->get('success') }}</div>
                    @endif

                    <form method="POST" action="{{ route('register') }}" enctype="multipart/form-data">
                        @csrf

                        <div class="form-group row">
                            <label for="nama" class="col-md-4 col-form-label text-md-right">{{ __('Nama Lengkap') }}</label>

                            <div class="col-md-6">
                                <input id="nama" type="text" class="form-control{{ $errors->has('nama') ? ' is-invalid' : '' }}" name="nama" value="{{ old('nama') }}" required autofocus>

                                @if ($errors->has('nama'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('nama') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" required>

                                @if ($errors->has('email'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('email') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>

                            <div class="col-md-5">
                                <input id="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" name="password" required>

                                @if ($errors->has('password'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('password') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>

                            <div class="col-md-5">
                                <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required>
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="nis" class="col-md-4 col-form-label text-md-right">{{ __('NIS') }}</label>

                            <div class="col-md-4">
                                <input id="nis" type="text" class="form-control{{ $errors->has('nis') ? ' is-invalid' : '' }}" name="nis" value="{{ old('nis') }}" required autofocus>

                                @if ($errors->has('nis'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('nis') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="tempat_lahir" class="col-md-4 col-form-label text-md-right">{{ __('Tempat Lahir') }}</label>

                            <div class="col-md-5">
                                <input id="tempat_lahir" type="text" class="form-control{{ $errors->has('tempat_lahir') ? ' is-invalid' : '' }}" name="tempat_lahir" value="{{ old('tempat_lahir') }}" required autofocus>

                                @if ($errors->has('tempat_lahir'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('tempat_lahir') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="tanggal_lahir" class="col-md-4 col-form-label text-md-right">{{ __('Tanggal Lahir') }}</label>

                            <div class="col-md-4">
                                <input id="tanggal_lahir" type="text" class="form-control{{ $errors->has('tanggal_lahir') ? ' is-invalid' : '' }}" name="tanggal_lahir" value="{{ old('tanggal_lahir') }}" required autofocus>
                                <small id="passwordHelpBlock" class="form-text text-danger">
                                 Format: YYYY-MM-DD, contoh 1990-11-29.
                                </small>                                

                                @if ($errors->has('tanggal_lahir'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('tanggal_lahir') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="nem" class="col-md-4 col-form-label text-md-right">{{ __('NEM') }}</label>

                            <div class="col-md-4">
                                <input id="nem" type="text" class="form-control{{ $errors->has('nem') ? ' is-invalid' : '' }}" name="nem" value="{{ old('nem') }}" required autofocus>

                                @if ($errors->has('nem'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('nem') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="no_ijazah" class="col-md-4 col-form-label text-md-right">{{ __('Nomor Ijazah') }}</label>

                            <div class="col-md-4">
                                <input id="no_ijazah" type="text" class="form-control{{ $errors->has('no_ijazah') ? ' is-invalid' : '' }}" name="no_ijazah" value="{{ old('no_ijazah') }}" required autofocus>

                                @if ($errors->has('no_ijazah'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('no_ijazah') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="jenis_sekolah" class="col-md-4 col-form-label text-md-right">{{ __('Jenis Asal Sekolah') }}</label>
                            <div class="col-md-7">
                                <div class="custom-control custom-radio custom-control-inline mt-2">
                                  <input type="radio" id="customRadioInline1" name="jenis_sekolah" class="custom-control-input" value="SMP">
                                  <label class="custom-control-label" for="customRadioInline1">SMP</label>
                                </div>
                                <div class="custom-control custom-radio custom-control-inline">
                                  <input type="radio" id="customRadioInline2" name="jenis_sekolah" class="custom-control-input" value="MTs">
                                  <label class="custom-control-label" for="customRadioInline2">MTs</label>
                                </div>
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="url_foto" class="col-md-4 col-form-label text-md-right">{{ __('Upload Foto') }}</label>
                            <div class="col-md-7">
                                <input id="url_foto" type="file" class="form-control{{ $errors->has('url_foto') ? ' is-invalid' : '' }}" name="url_foto" value="{{ old('url_foto') }}" required autofocus>

                                @if ($errors->has('url_foto'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('url_foto') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>


                        <div class="form-group row">
                            <label for="nama_ortu" class="col-md-4 col-form-label text-md-right">{{ __('Nama Orang Tua') }}</label>

                            <div class="col-md-6">
                                <input id="nama_ortu" type="text" class="form-control{{ $errors->has('nama_ortu') ? ' is-invalid' : '' }}" name="nama_ortu" value="{{ old('nama_ortu') }}" required autofocus>

                                @if ($errors->has('nama_ortu'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('nama_ortu') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="pekerjaan_ortu" class="col-md-4 col-form-label text-md-right">{{ __('Pekerjaan Orang Tua') }}</label>

                            <div class="col-md-6">
                                <input id="pekerjaan_ortu" type="text" class="form-control{{ $errors->has('pekerjaan_ortu') ? ' is-invalid' : '' }}" name="pekerjaan_ortu" value="{{ old('pekerjaan_ortu') }}" required autofocus>

                                @if ($errors->has('pekerjaan_ortu'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('pekerjaan_ortu') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="telp" class="col-md-4 col-form-label text-md-right">{{ __('Telp/Handphone') }}</label>

                            <div class="col-md-4">
                                <input id="telp" type="text" class="form-control{{ $errors->has('telp') ? ' is-invalid' : '' }}" name="telp" value="{{ old('telp') }}" required autofocus>

                                @if ($errors->has('telp'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('telp') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="alamat" class="col-md-4 col-form-label text-md-right">{{ __('Alamat Lengkap') }}</label>
                            <div class="col-md-6">
                                <textarea id="alamat" type="text" class="form-control{{ $errors->has('alamat') ? ' is-invalid' : '' }}" name="alamat" value="{{ old('alamat') }}" rows="3"></textarea>

                                @if ($errors->has('alamat'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('alamat') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row mb-0">
                            <div class="col-md-6 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                    {{ __('Daftar') }}
                                </button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

Tampilan akhir form pendaftaran

Menampilan Data pada Dashboard Admin dan Pendaftar

Seperti sudah dibahas sebelumnya, bahwa PSB Online ini menggunakan fitur login multi level akses di mana ada dua level akses yaitu level Admin dan level Calon Siswa. Jika yang login level Admin, maka akan diarahkan ke dashboard admin,  dan sebaliknya jika yang login level pendaftar (calon siswa) akan diarahkan ke dashboard calon siswa.

Untuk menampilkan data pada dashboard sesuai hak akses, tentu kita harus memodifikasi kedua dashboard tersebut, baik dashboard admin maupun calon siswa.

1. Dashboard Pendaftar 

Pada dashboard pendaftar kita akan coba menampilkan biodata calon siswa, baik itu data isian maupun data image/file. Pertama, mari kita edit file controller PendaftarController.php dengan menambahkan kode query builder untuk mendefinisikan variable data apa saja yang akan ditampilkan pada blade view (pendaftar.blade.php).

Sebelum melakukan query builder, panggil terlebih dahulu class untuk query builder dan letakan setelah kode use Illuminate\Http\Request;serta class Authentication.

use Illuminate\Support\Facades\DB;
use Auth;

Selanjutnya lakukan query untuk menampilkan data pada tabel users dan biodata pada fungsi index.

    public function index()
    {
        $title = 'Dashboard Calon Siswa';
        $id =  Auth::user()->id;
        $user = DB::table('users')->where('id', $id)->first();
        $biodata = DB::table('biodata')->where('user_id', $id)->first();

        return view('pendaftar', compact('title', 'user', 'biodata'));
    }

Berikut ini hasil akhir modifikasi controller pendaftar.

app/Http/Controllers/PendaftarController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Auth;

class PendaftarController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }
    
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $title = 'Dashboard Calon Siswa';
        $id =  Auth::user()->id;
        $user = DB::table('users')->where('id', $id)->first();
        $biodata = DB::table('biodata')->where('user_id', $id)->first();

        return view('pendaftar', compact('title', 'user', 'biodata'));
    }
}

Baris kode ke-24 didefinisikan variable data $id = Auth::user()->id; variable tersebut untuk mendapatkan data ID user yang login. Baris kode ke-25 dan 26 merupakan query builder untuk table users dan biodata berdasarkan ID user yang login. Selanjutnya variable data tersebut direturn ke blade view pendaftar (Baris kode ke-28).

Silakan edit file blade view pendaftar, dan sesuaikan seperti kode berikut:

resources/views/pendaftar.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-10">
            <div class="card">
                <div class="card-header">{{ $title }}</div>

                <div class="card-body">
                    @if (session('status'))
                        <div class="alert alert-success" role="alert">
                            {{ session('status') }}
                        </div>
                    @endif

               <img src='{{ asset("images/$biodata->url_foto") }}' class='img-thumbnail' alt='User Image'>
                    <table class="table table-sm">
                      <tbody>
                        <tr>
                          <td class="table-info" width="200px">Nama Lengkap</td>
                          <td>{{ $biodata->nama }}</td>
                        </tr>
                        <tr>
                          <td class="table-info">NIS</td>
                          <td>{{ $biodata->nis }}</td>
                        </tr>
                        <tr>
                          <td class="table-info">TTL</td>
                          <td>{{ $biodata->tempat_lahir }}, {{ $biodata->tanggal_lahir }}</td>
                        </tr>
                        <tr>
                          <td class="table-info">NEM</td>
                          <td>{{ $biodata->nem }}</td>
                        </tr>
                        <tr>
                          <td class="table-info">No. Ijazah</td>
                          <td>{{ $biodata->no_ijazah }}</td>
                        </tr>
                        <tr>
                          <td class="table-info">Nama Orang Tua</td>
                          <td>{{ $biodata->nama_ortu }}</td>
                        </tr>                
                      </tbody>
                    </table>

                </div>
            </div>
        </div>
    </div>
</div>
@endsection

2. Dashboard Admin 

Modifikasi dashboard Admin pada dasarnya sama dengan langkah memodifikasi dashboar Calon Siswa, yaitu mengedit file controller dan file blade. Pada dashboard Admin kita akan menampilkan seluruh calon siswa yang sudah berhasil melakukan pendaftaran.

app/Http/Controllers/AdminController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;

class AdminController extends Controller
{


    public function __construct()
    {
        $this->middleware('auth');
    }
    
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $title = 'Dashboard Admin';
        $users = User::where('level', 1)->get();

        return view('admin', compact('title', 'users'));
    }


}

Pada baris kode ke-25 adalah query untuk mengambil seluruh data users dengan level sebagai pendaftar. Artinya user dengan level bukan bernilai 1 tidak akan ditampilkan datanya. Query pada PendaftarController menggunakan Query Builder, sementara pada AdminController menggunakan Eloquent. Query dengan metode Eloquent sangat berguna ketika kita ingin mengambil data dari table lain yang berelasi. Untuk lebih jelasnya akan kita implementasikan pada blade admin di bawah ini. Silakan buka file blade admin dan sesuaikan dengan

resources/views/admin.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-12">
            <div class="card">
                <div class="card-header">Dashboard Admin</div>

                <div class="card-body">

                    <table class="table">
                      <thead>
                        <tr>
                          <th scope="col">No</th>
                          <th scope="col">Nama Lengkap</th>
                          <th scope="col">E-Mail</th>
                          <th scope="col">NIS</th>
                          <th scope="col">NEM</th>
                          <th scope="col">FOTO</th>
                        </tr>
                      </thead>
                      <tbody>
                        <?php $i = 0; ?>
                        @foreach ($users as $user)
                        <?php $i++ ;?>
                        <tr>
                          <th scope="row">{{ $i }}</th>
                          <td>{{ $user->Biodata->nama }}</td>
                          <td>{{ $user->email }}</td>
                          <td>{{ $user->Biodata->nis }}</td>
                          <td>{{ $user->Biodata->nem }}</td>
                          <td>
                           <a href="{{asset('images')}}/{{$user->Biodata->url_foto}}" target="_blank">Lihat Foto {{ $user->Biodata->nama }}</a>
                           
                          </td>
                        </tr>
                        @endforeach

                      </tbody>
                    </table>


                </div>
            </div>
        </div>
    </div>
</div>
@endsection

Pada baris kode ke-29,  data yang akan ditampilkan adalah kolom nama  di mana kolom nama tersebut berada pada tabel Biodata. Sementera query yang dibuat pada AdminController adalah query untuk table Users,  $users = User::where('level', 1)->get();. Karena table Biodata berelasi dengan table Users, maka untuk memanggil data kolom nama cukup dengan kode $user->Biodata->nama.

Nampak jelas terlihat pada gambar di atas, di mana kolom Nama Lengkap, NIS, NEM dan FOTO berasal dari table Biodata, sementara kolom E-Mail berasal dari tabel Users.