Lompat ke konten Lompat ke sidebar Lompat ke footer

Cara Menggunakan Foreign Key Insert Data Livewire Laravel 10

 cara menyambungkan foregn key atau FK pada lifewire


contoh migrasi kali ini table mapel utama dan foregn nya table guru


pada migration mapel nama table 

Schema::create('mapel', function (Blueprint $table) {
$table->foreignId('guru_id')->references('id')->on('guru')->constrained()->cascadeOnDelete()->cascadeOnUpdate();

artinya : pada table guru_id >referensi atau saling sambuing pada id nya table guru

biar nanti bisa nyambungin ke blade nya

jadi misal ada nilai yg di hapus pada table guru,  otomatis nilai pada table mapel

akan ikut terhapus


pada model mapel tambahkan function

    function guru()
    {
        return $this->belongsTo(Guru::class);
    }

contoh fullnya 

class Mapel extends Model
{
    use HasFactory;
    protected $table = 'mapel';

    protected $fillable = [
        'nama_mapel',
        'guru_id',
        'kelas_id',
        'tingkat_pendidikan_id',
        'jenis_mapel',
        'nilai_minimal',
        'hari',
    ];

    function guru()
    {
        return $this->belongsTo(Guru::class);

    }

pada controller mapel, fullnya

public function render()
    {
        $mapel_data = MapelModel::orderBy('created_at', 'DESC')->get();
        $guru_id_data = GuruModel::orderBy('nama_guru', 'ASC')->get();

        return view('livewire.dashboard.guru.mapel', compact('mapel_data', 'guru_id_data'))->layout('layouts.dashboard');
    }

jgn lupa diatasnya kasih

use App\Models\Mapel as MapelModel;
use App\Models\Guru as GuruModel;

artinya : 

variable $guru_id_data  akan menampung data yg akan di tampilan ke dalam compact('      

guru_id_data'  pada view return view('livewire.dashboard.guru.mapel'  

 orderBy('created_at', 'DESC') orderby artinya ASC ascending dari field nama_guru  

 layout('layouts.dashboard'  = pengganti yield & extend pada livewire


untuk method lain seperti 

public function store()

public function resetinput()

public function edit($id)

public function delete()

public function update()

masih sama semua. gada yg beda


pada blade/layout mapel

untuk menampilkan data 

@if($mapel_data->count() > 0)
            @foreach($mapel_data as $data)
              <tr>
                <td>{{ $loop->index + 1 }}.</td>
                <td>{{ $data->nama_mapel }}</td>
                <td>{{ $data->guru->nama_guru }}</td>
                <td>{{ $data->kelas->nama_kelas }}</td>
                <td>{{ $data->tingkat_pendidikan->tingkat }}</td>
                <td>{{ $data->jenis_mapel }}</td>
                <td>{{ $data->nilai_minimal }}</td>
                <td>{{ $data->hari }}</td>
@endforeach
          @else

artinya : 

@foreach($mapel_data as $data) = $mapel_data ngambil dari controller render tadi kita buat    

perhatikan yg ada 2 panah "->" $data->guru->nama_guru  yg artinya itu hasil relasi foregn key     

>guru

artinya ngambil dari table guru

->nama_guru

artinya dari field nama_guru

total artinya ngambil dari table guru di field nama_guru


untuk fitur tambah dengan liveware

              <div class="mb-3">
                <select class="form-select mb-3" aria-label="Default select example" wire:model="guru_id">
                  <option selected>Pilih Guru</option>
                  @foreach ($guru_id_data as $data)
                  <option value="{{ $data->id }}">{{ $data->nama_guru }}</option>
                  @endforeach
                </select>
              </div>

wire:model="guru_id" = artinya untuk data guru_id  akan di ambil oleh controller model guru_id  

(yg biru kanan)

 $save = MapelModel::create([
                    'guru_id' => $this->guru_id,

untuk edit kurang lebih sama

    public function edit($id)
        {
            $data_mapel = MapelModel::find($id);
            $this->id = $id;

            $this->nama_mapel = $data_mapel->nama_mapel;
            $this->guru_id = $data_mapel->guru_id;