Laravel 5.5 - 深度关系呼叫 - >

问题描述 投票:0回答:1

我现在花了几个小时谷歌搜索和试验与两个中间表工作的关系。我的数据库看起来像这样:( 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

在刀片中:

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

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

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

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

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

显示在页面上。

问候,帕特

laravel-5 model entity-relationship laravel-blade laravel-eloquent
1个回答
1
投票

我不认为你可以使用你发布的代码实现你想要的东西,因为在调用时,例如,$house->apartments它会返回一个Collection对象。所以,它不再处理数据库,这就是为什么你需要使用一堆@foreachs。

我不知道这是否是解决此问题的最佳方法,或者它是否会帮助您解决实际问题,但您可以将此问题反向思考并尝试以下方法:

$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
© www.soinside.com 2019 - 2024. All rights reserved.