【问题标题】:Get datas from one to many (inverse ) relation laravel从一对多(逆)关系 laravel 中获取数据
【发布时间】:2017-07-16 20:23:21
【问题描述】:

我有 2 个模型 'Trips.php'

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

Region.php

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

我试图展示一个特定地区的旅行。例如:我有一个名为Lake Side 的区域,我想在列表中显示Lake Side 区域中的所有行程。

我尝试了以下方法:

在控制器中:

$trips = Trip::all();

在视图中:

@foreach($trips as $trip)
<li><a href="#">
    {{$trip->region->name}}</a>
    <ul class="dropdown">
        <li><a href="#">
            {{$trip->title}}</a>
        </li>    
    </ul>
</li>
@endforeach   

这给了我地区名称和旅行名称,但如果在同一地区进行了多次旅行,则重复地区名称。

并尝试了另一种方法(反向):

<ul class="dropdown">
@foreach($regions as $region)
<li><a href="#">
    {{$region->tour->title}}</a>
</li>
@endforeach
</ul>  

得到错误Trying to get property of non-object

【问题讨论】:

    标签: php laravel laravel-5.3 blade laravel-blade


    【解决方案1】:

    一种方法是使用whereHas()

    $trips = Trip::whereHas('region', function($q) use ($regionName) {
        $q->where('name', $regionName);
    })->get();
    

    $trips$regionName 传递给视图:

    @foreach ($trips as $trip)
        <li><a href="#">{{ $regionName }}</a>
            <ul class="dropdown">
                <li><a href="#">
                    {{ $trip->title }}</a>
                </li>    
            </ul>
        </li>
    @endforeach   
    

    或者,您可以使用eager loading

    $region = Region::where('name', $regionName)->with('trips')->first();
    

    在视图中:

    @foreach ($region->trips as $trip)
        <li><a href="#">{{ $region->name }}</a>
            <ul class="dropdown">
                <li><a href="#">
                    {{ $trip->title }}</a>
                </li>    
            </ul>
        </li>
    @endforeach  
    

    【讨论】:

    • 是否可以在服务提供商中进行??因为我正在尝试制作导航栏。
    【解决方案2】:

    通过获得区域旅行,您实际上获得的是每次旅行都带有区域属性。

    相反,请执行相反的操作Region::with('trips')-&gt;where('id', $regionId)-&gt;get(),您将获得他们旅行的地区。所以现在每个区域结果都有一个包含许多行程的trips 属性。

    或者,不要使用急切加载。所以Region::firstOrFail($regionId) 然后就用$region-&gt;trips

    你可以像这样循环遍历它们

    // Can print region here
    @foreach($region->trips as $trip)
        // Can print region's trips here
    @endforeach
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      • 2019-01-12
      相关资源
      最近更新 更多