【问题标题】:Laravel Eloquent fetch nested compact json dataLaravel Eloquent 获取嵌套的紧凑 json 数据
【发布时间】:2020-10-22 11:56:01
【问题描述】:

我有两个不同的Models

App\Models\Team;

App\Models\Member;

我的Team 模型哪里有这个功能

public function memberList()
{
    return $this->hasMany('App\Models\Member');
}

我正在使用此代码在我的刀片上显示它

 $team = Team::with('memberList')->get();
 return view('front.pages.custom-pages-index', compact('team'));

这是我的表格列

成员表

团队表

现在我正在尝试使用这个 foreach 访问压缩数据

@if(count($team))
     @foreach($team as $field)
         //Name of Team
         <h1>{{$field->name}}</h1>
         //Member
          ....
     @endforeach
@endif

这是我尝试访问刀片文件上的{{ $team }}时压缩数据的示例内容

 [{
"id":1,
"name":"Executive Team",
"created_at":"2020-05-26 04:38:27",
"updated_at":"2020-05-26 04:38:27",
"member_list":[{
    "id":1,
    "team_id":1,
    "position":1,
    "name":"Chris White, PH.D",
     "member_position":"President, Founder and CEO",
  ...And other member per specific team

问题是我想在刀片上获取每个特定团队的成员

更新

当我至少尝试使用 foreach 访问 member_list 内部的 name

$field-&gt;member_list-&gt;name

我遇到了这样的错误

Trying to get property 'name' of non-object

尝试var_dump($field-&gt;member_list)

试过这个@php dd($field-&gt;member_list); @endphp

【问题讨论】:

  • 您可以评论您的 foreach 循环并在评论之前将您的 field_member 变量转储到 if 语句中吗?
  • @umuttaymaz 显示为空,但当我尝试 {{$team}} member_list 时不为空
  • 其实不应该写成NULL。您也可以在 if 语句中添加 $field->member_list != NULL 。 !empty($field->member_list) 或 !is_null($field->memberlist) 或 $field->member_list != NULL
  • 嗯尝试了你的建议,问题是同样的错误。
  • 删除所有条件,只给出一个条件。计数($field->member_list) > 0

标签: php laravel eloquent


【解决方案1】:

在我的 Member.php(模型)中

添加了这个

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

在我的 Team.php(模型)中

public function memberList()
{
    return $this->hasMany('App\Models\Member', 'team_id', 'id');
}

控制器

  $team = Team::with('memberList')->get();
  return view('front.pages.custom-pages-index', compact('team'));

刀片

  @if(count($team) > 0)
        @foreach($team as $field)
                {{$field->name}}
               @foreach($field->memberList as $member)
                  {{$member->image}}
               @endforeach
        @endforeach
 @endif

需要首先使用主键和外键映射团队和成员模型

并调用json列memberList

【讨论】:

    【解决方案2】:

    因为变量字段的 member_list 项是一个数组,而“name”不是这个数组的键。您应该在主循环内为您的成员列表使用另一个循环。

    @if(count($team))
     @foreach($team as $field)
         //Name of Team
         <h1>{{$field->name}}</h1>
    
         //Member
         @if(!empty($field->member_list) OR !is_null($field->memberlist))
            @foreach($field->member_list as $member)
            <h2>{{$member->name}}</h2>
           @endforeach
         @endif
     @endforeach
    @endif
    

    【讨论】:

    • 按照您的回答,但收到此错误 Invalid argument provided for foreach()
    • 你有没有成员的团队吗?
    • 您应该在 foreach 之前检查 $field->member_list 是否为空或不为空。没有任何成员的团队会导致此错误
    • 尝试过类似@if(!empty($field-&gt;member_list) || $field-&gt;member_list != NULL) @foreach($field-&gt;member_list as $member) ... 的团队名称显示,但某些团队的成员没有显示。另外我使用!empty!= NULL 成员未显示但团队名称显示。
    • 将 $field->member_list != NULL 更改为 !is_null($field->member_list) 并试一试
    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2014-08-15
    • 2015-12-02
    • 2015-11-24
    • 2020-12-19
    • 2021-12-30
    • 2019-02-14
    相关资源
    最近更新 更多