如何在laravel雄辩地加入多个表

时间:2019-10-19 11:37:58

标签: laravel eloquent

我在数据库中有5个与此相关的表

tbl_petugas:

id | name
1  | jako
2  | miki

tbl_segment:

id|petugas_id|kelompok_jalan_id|date
1 |1         |1                |2-oct

tbl_kelompok_jalan:

id|name
1 |jl kebayoran
2 |jl M said

tbl_kelompok_jalan_pelanggan:

id|kelompok_jalan_id|pelanggan_nometer
1 |1                |112233
2 |1                |223344

tbl_pelanggan:

nometer | name
112233  | vivi
223344  | lala

我需要获取所有与矮胖有关的pelanggan,并且这是我雄辩的模型tbl_segment上的联系

petugas model:
class Petugas extends Model
{
    public function segment()
    {
        return $this->belongsToMany(Kelompokjalan::class,'tbl_segment');
    }
}

segment model:
class Segment extends Model
{
    public function kelompok()
    {
        return $this->belongsTo(Kelompokjalan::class,'kelompok_jalan_id');
    }

    public function petugas()
    {
        return $this->belongsTo(petugas::class,'petugas_id');
    }
}

kelompokjalan model:
class KelompokJalan extends Model
{
    public function pelanggan()
    {
        return $this->belongsToMany(pelanggan::class,'tbl_kelompok_jalan_pelanggan');
    }

    public function petugas()
    {
        return $this->belongsToMany(petugas::class,'tbl_segment');
    }
}

pelanggan model;
class Pelanggan extends Model
{
    public function kel()
    {
        return $this->belongsTo(kelurahan::class,'kelurahan','kode');
    }

    public function kec()
    {
        return $this->belongsTo(kecamatan::class,'kecamatan','kode');
    }

    public function kelompok()
    {
        return $this->belongsToMany(Kelompokjalan::class,'tbl_kelompok_jalan_pelanggan');
    }
}

我尝试搭配pelanggan

$petugas = Petugas::find(3);
return $petugas->segment->kelompok->pelanggan;

但是什么也没出现,任何人都可以给我线索,我被卡住了。 谢谢。。

2 个答案:

答案 0 :(得分:0)

PetugasKelompokJalan模型以belongsToMany关系的形式加入。您不能以segment->kelompok->pelanggan;

的身份直接访问
$petugas = Petugas::with('segment.kelompok')->whereId(3)->first();

现在使用dd($petugas)print_r($petugas);进行检查,您将获得segment的多个对象

尝试使用foreach

if(!empty($petugas->segment)){
    foreach($petugas->segment as $segment){
        print_r($segment);
    }

}

尝试使用foreach,因为这里没有单个数组,而是多个对象。

答案 1 :(得分:0)

我从Dilip Hirapa得到了线索的解决方案

$ petugas = Petugas :: with('segment.kelompok.pelanggan')-> whereId(3)-> first();

会出现pelanggan