【问题标题】:Showing related table information in blade template laravel在刀片模板laravel中显示相关表信息
【发布时间】:2016-08-18 11:29:47
【问题描述】:

我的表之间有以下关系

在我的模型中,我有以下代码:

位置模型:

public function member() {
  return $this->belongsTo('App\Member','member_id');
 }

会员模型:

public function locations(){
    return $this->hasMany('App\Location','member_id');
}

现在在我的位置控制器中,我创建了以下函数。

public function getFinalData(){
    $locations = Location::with('member')->whereNotNull('member_id')->get();
    return view('locations.final-list',['locations'=>$locations]);
}

然而,在我的刀片模板中,我无法遍历成员属性

<ul>
    @foreach($locations as $location)
      <li>{{$location->id}}</li>
        <li>
         @foreach($location->member as $member)
          {{$member->id}}
         @endforeach
        </li>
    @endforeach
</ul>

这给了我以下错误: 试图获取非对象的属性(查看:locations/final-list.blade.php)

更新:我试图达到的结果对应于这个查询

SELECT locations.location_id,locations.name,members.first_name,          members.last_name , locations.meters
FROM locations,members
WHERE locations.member_id = members.id

更新 2:

所以我尝试访问一个附有单个位置的位置,并且效果很好

public function getFinalData(){
    //$locations = Location::with('member')->whereNotNull('member_id')->get();
    $location = Location::find(0);

    return view('locations.final-list',['location'=>$location]);
}

在最终名单中 $location->member->first_name

**更新 3 ** 一条记录的修补程序输出:

【问题讨论】:

  • member_id 是成员表的 Pk 那么它怎么可能是 NULL 呢?你写了 whereNotNull('member_id')。
  • @RaviHirani 因为我得到了一个定义了 member_id 的位置列表?
  • 我可能遗漏了一些东西,但您的方法 getFinalData 似乎是错误的。当您在模型上执行 with 时,laravel 仅获取有关该关系的数据。它不查询关联的模型。所以在你的情况下,当你这样做$locations = Location::with('member')-&gt;whereNotNull('member_id')-&gt;get();你应该得到一个错误Column not found

标签: php laravel-5 blade


【解决方案1】:

blade中显示相关表格信息如下:

模型关系 位置模型:

public function member() {
   return $this->belongsTo('App\Member','member_id');
}

会员模型:

public function locations(){
    return $this->hasMany('App\Location','member_id');
}

获取控制器中的所有位置

$locations = Location::all();
return view('locations.final-list', compact('locations'));

或者

$locations = Location::orderBy('id')->get();
return view('locations.final-list', compact('locations'));

在您的视图(刀片)中编写以下代码:

<div>
    @if($locations)
        @foreach($locations AS $location)
            <div>{{ $location->id }}</div>
            @if($location->member)
                @foreach($location->member AS $member)
                    <div>
                        {{ $member->id }}
                    </div>
                @endforeach
            @endif
        @endforeach
    @endif
</div>

【讨论】:

    【解决方案2】:

    在您的 Location 模型中,重写以下函数:-

    public function member()
    {
        return $this->belongsTo('App\Member', 'id');
    }
    

    获取会员详细信息的所有位置如下:-

    $locations = Location::with('member')->get();
    

    希望它对你有用:-)

    【讨论】:

    • belongsTo上的引用也需要保留member_id,member_id引用了member表上的id?
    • @KrisTemmerman:是的。看到这个链接:stackoverflow.com/questions/24469122/…
    • 这不是我的问题的解决方案。 @RaviHirani
    • 我只是想说您提供了错误的参考。
    • 但是用你的解决方案我得到了同样的结果@RaviHirani
    猜你喜欢
    • 1970-01-01
    • 2019-09-23
    • 2014-09-14
    • 2018-09-24
    • 2018-09-05
    • 2014-11-07
    • 2019-01-15
    • 2020-09-22
    • 2016-10-01
    相关资源
    最近更新 更多