使用雄辩的关系从dtabase中的多个表中显示刀片中的数据

时间:2019-02-13 17:28:24

标签: php database laravel eloquent

我正在尝试根据刀片中的相应数据显示从多个表到单个html表的字段。但是我没有任何结果

我的数据库设计:

District 
| id 
| district_name

Municipal
| id
| district_id
| Municipal_uid
| municipal_name 

Area
| id 
| area_name
| district_id
| municipal_id

这就是我要实现的目标,

Area ID | Area Name | District Name | Municipal Name | municipal UID

我的模特

  

区域:

public function districts(){
    return $this->belongsTo('App\Districts');
}

public function municipals(){
    return $this->belongsTo('App\Municipals');
}
  

市政:

public function district(){
    return $this->belongsTo('App\Districts');
}

public function approvedlayout(){
    return $this->hasMany('App\Approvedlayouts');
}
  

地区:

 public function municipal(){
    return $this->hasMany('App\Municipals');
}

public function approvedlayout(){
    return $this->hasMany('App\Approvedlayouts');
}

刀片

 <table class="table table-striped">
                            <thead class="text-center">
                                <tr>
                                    <th>Area ID</th>
                                    <th>Area Name</th>
                                    <th>District  Name </th>
                                    <th>Municipal Name</th>
                                    <th>Municipal UID</th>
                                </tr>
                            </thead>

                            <tbody class="list">
                                @foreach ($areas as $layout)
                                <tr>
                                    <td>{{$layout ->id}}</td>
                                    <td> {{ $layout-area_name }}</td>
                                    <td> {{ $layout->districts-> district_name }}</td>
                                    <td> </td>
                                    <td></td>
                                    <td></td>
                                </tr>
                                @endforeach
                            </tbody>
                        </table>
                        {{$areas-> links()}} 

控制器

  public function index()
    {
        $areas = Area::simplePaginate(5);
        return view('admin.area.index',compact('areas'));
    }

当我尝试显示地区名称

  

({{$ layout-> districts-> district_name}})

我遇到错误

  

试图获取非对象的属性“ district_name”(查看:   lapp / resources / views / area / index.blade.php

3 个答案:

答案 0 :(得分:2)

更改模型,使其了解外键

Area:

public function districts(){
    return $this->belongsTo('App\Districts','district_id','id');
}

public function municipals(){
    return $this->belongsTo('App\Municipals','Municipal_uid','id');
}

Municipal:

public function district(){
    return $this->belongsTo('App\Districts','district_id','id');
}


District:

 public function municipal(){
    return $this->hasMany('App\Municipals','id','district_id');
}

答案 1 :(得分:0)

$layout->districts()->first()->district_name

将显示第一区。 如果有多个,则可以先将其更改为get()。然后,您将需要另一个foreach。

答案 2 :(得分:0)

您总是可以在查询生成器上使用leftJoinselect函数来获得这些结果。它也比每行调用它快得多。

Area::select('areas.id','areas.name', 'districts.name as district_name', 'municipals.name as municipal_name', 'municipals.id as municipal_id')
    ->leftJoin('districts', 'districts.id', '=', 'area.district_id')
    ->leftJoin('municipals', 'municipals', '=', 'area.municipal_id')
    ->get();

然后,您可以将选择功能中的内容刷新为$layout->district_name