Azzario Razy
Azzario Razy

Reputation: 31

How to get data from intermediate table in laravel?

I have 3 table like this,

kelas

id | kelas | romawi

jurusan

id | alias | motto | visi | misi | tahun

kelas_jurusan (intermediate table)

id | id_kelas (from table kelas) | id_jurusan (from table jurusan)

Update:

siswa

nama_lengkap | nisn | id_kelas_jurusan (from table kelas_jurusan)

I want to get data 'kelas' in table kelas with accessing the kelas_jurusan table in Siswa model.

I have code like this: Siswa Model

public function kelas()
    {
        return $this->belongsToMany('App\Kelas', 'kelas_jurusan', 'id_kelas');
    }

Upvotes: 1

Views: 233

Answers (1)

M Khalid Junaid
M Khalid Junaid

Reputation: 64476

This looks like a Many To Many relationship. You can define your models as

class Kelas extends Model
{
    public function jurusans()
    {
        return $this->belongsToMany(Jurusan::class, 'kelas_jurusan', 'id_kelas');
    }
}

class Jurusan extends Model
{
    public function kelases()
    {
        return $this->belongsToMany(Kelas::class, 'kelas_jurusan', 'id_jurusan');
    }
}

To get data from both models you can use eager loading

Kelas::with('jurusans')



As per your updated structure you need to introduce a new junction model like KelasHasJurusan which will have following mappings in it

KelasHasJurusan

class KelasHasJurusan extends Model
{
    public function kelas()
    {
        return $this->belongsTo(Kelas::class, 'id_kelas');
    }
        public function jurusan()
    {
        return $this->belongsTo(Jurusan::class, 'id_jurusan');
    }

    public function siswas(){

        return $this->hasMany(Siswa::class, 'id_kelas_jurusan');

    }
}

Other models will be mapped like

Kelas

class Kelas extends Model
{
    public function kelasHasJurusan()
    {
        return $this->hasMany(KelasHasJurusan::class, 'id_kelas');
    }
}

Jurusan

class Jurusan extends Model
{
    public function kelasHasJurusan()
    {
        return $this->hasMany(KelasHasJurusan::class, 'id_jurusan');
    }
}

Siswa

class Siswa extends Model
{
    public function kelasHasJurusan()
    {
        return $this->belongsTo(KelasHasJurusan::class, 'id_kelas_jurusan');
    }
}

Now to load data for kelas alongwith siswa data you can get as

Kelas::with('kelasHasJurusan.siswas')

Upvotes: 1

Related Questions