我正在尝试根据刀片中的相应数据显示从多个表到单个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
答案 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)
您总是可以在查询生成器上使用leftJoin
和select
函数来获得这些结果。它也比每行调用它快得多。
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
。