如何从laravel中间表中获取数据?

时间:2018-05-28 07:19:32

标签: php mysql laravel-5

我有3张这样的表,

kelas

  

id | kelas | romawi

jurusan

  

id |别名|座右铭| visi | misi | tahun

kelas_jurusan (中间表)

  

id | id_kelas(来自表kelas)| id_jurusan(来自表jurusan)

更新

siswa

  

nama_lengkap | nisn | id_kelas_jurusan(来自表kelas_jurusan)

我希望通过访问Siswa模型中的kelas_jurusan表来获取表kelas中的数据'kelas'。

我有这样的代码: Siswa模型

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

1 个答案:

答案 0 :(得分:1)

这看起来像Many To Many关系。您可以将模型定义为

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');
    }
}

要从两个模型中获取数据,您可以使用eager loading

Kelas::with('jurusans')

<小时/> <小时/>

根据您更新的结构,您需要引入一个新的联结模型,如KelasHasJurusan,其中将包含以下映射

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');

    }
}

其他模型将被映射为

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');
    }
}

现在加载kelas的数​​据以及siswa数据,你可以得到

Kelas::with('kelasHasJurusan.siswas')