我现在花了几个小时谷歌搜索和试验与两个中间表工作的关系。我的数据库看起来像这样:( apt_id是真实的apartment_id,写的更短)
我将所有关系设置为使用belongsTo和hasMany正确设置:示例来自House.php
public function user()
{
return $this->belongsTo('App\User');
}
public function apartments()
{
return $this->hasMany('App\Apartment');
}
有没有办法访问这些关系,如:
$house->apartments->tenants->entries
在刀片中:
@foreach ( $house->apartments->tenants->entries as $entry )
,因为我想显示house.show上的所有房屋条目(Blade View)
它工作的唯一方法是在彼此内部使用一堆foreach ......:/并定义订单......
使用我想要的关系调用产生:
Property [tenants] does not exist on this collection instance.
显示在页面上。
问候,帕特
我不认为你可以使用你发布的代码实现你想要的东西,因为在调用时,例如,$house->apartments
它会返回一个Collection对象。所以,它不再处理数据库,这就是为什么你需要使用一堆@foreach
s。
我不知道这是否是解决此问题的最佳方法,或者它是否会帮助您解决实际问题,但您可以将此问题反向思考并尝试以下方法:
$entries = \App\Entry::whereHas('tenants', function($q) use ($house) {
$q->whereHas('apartments', function($q1) use ($house) {
$q1->where('apartments.house_id', $house->id);
});
})->get();
在视图中:
@foreach ($entries as $entry)
{{ $entry->tenant->apartment->house->name }}
@endforeach