Laravel 5.5 - 深度关系呼叫 - >

时间:2017-12-07 16:47:39

标签: laravel-5 model entity-relationship laravel-blade laravel-eloquent

我现在花了几个小时谷歌搜索并尝试与两个中间表工作的关系。 我的数据库看起来像这样: (apt_id是真实的apartment_id,写的时间更短) Database drawing

我使用belongsTo和hasMany正确设置了一个关系: 示例来自House.php

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

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

是否有办法访问这些关系,如:

$house->apartments->tenants->entries
在Blade中

@foreach ( $house->apartments->tenants->entries as $entry )

,因为我想在house.show(Blade View)上显示所有房屋条目

它工作的唯一方法是在彼此内部使用一堆foreach ......:/并定义订单......

使用我想要的关系调用产生:

Property [tenants] does not exist on this collection instance. 

显示在页面上。

问候, 专利

1 个答案:

答案 0 :(得分:1)

我认为你不能使用你发布的代码实现你想要的东西,因为在调用时,例如$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