【问题标题】:Trying to get property '' of non-object (View:试图获取非对象的属性“”(查看:
【发布时间】:2019-07-22 05:26:42
【问题描述】:

我正在尝试通过存储在用户表中的 ID,根据他们对应的地区/区域来获取用户,

我能够获取 District 的结果,而对于该 Area,我得到了错误,

试图获取非对象的属性“area_name”(查看: 用户索引.blade.php)

User 

id | district_id | area_id | user_name

District

id | district_name

area

id | district_id | area_name

控制器

 $users = Users::simplePaginate(5);

        return view('user-index',compact('users'));

型号

用户

public function districts(){
        return $this->belongsTo('App\Districts','district_id','id');
    }

    public function areas(){
        return $this->belongsTo('App\Area','area_id','id');
    }

刀片

 @foreach ($users as $user)
                              {{$user-> first_name}}  -  I get result
                              {{$user->districts->district_name}} - I get result
                              {{$user->areas->area_name}} -- I get error 

@endforeach

【问题讨论】:

  • dd($users) 显示什么?向我们展示您的区域模型。
  • 它在用户表 @Script47 中获取结果
  • 尝试使用dd()打印单个$user。
  • 请发布 dd($users) 输出

标签: php database laravel laravel-5 eloquent


【解决方案1】:

在您的控制器中尝试

$users = Users::with(['areas','districts'])->simplePaginate(5);
return view('user-index',compact('users'));

在你的刀片文件中检查关系是否设置。

@foreach ($users as $user)
   {{ $user->first_name }}
   {{ $user->districts ? $user->districts->district_name : '' }}
   {{ $user->areas ? $user->areas->area_name : '' }} 
@endforeach

【讨论】:

    【解决方案2】:

    因为同一用户没有区域而发生错误。要修复它,请使用此

    @foreach ($users as $user)
        {{$user->first_name}}
        {{$user->districts->district_name ?? ''}}
        {{$user->areas->area_name ?? ''}} 
    @endforeach
    

    @foreach ($users as $user)
    
        {{$user-> first_name}}
    
        @if($user->districts)
            {{$user->districts->district_name}}
        @endif
    
        @if($user->areas)
            {{$user->areas->area_name}}
        @endif
    
    @endforeach
    

    也为属于关系使用单数名称

    public function district(){
        return $this->belongsTo('App\Districts','district_id','id');
    }
    
    public function area(){
        return $this->belongsTo('App\Area','area_id','id');
    }
    

    刀片使用情况

    @foreach ($users as $user)
        {{$user->first_name}}
        {{$user->district->district_name ?? ''}}
        {{$user->area->area_name ?? ''}} 
    @endforeach
    

    为了避免在控制器中使用延迟加载

    $users = Users::with(['area', 'district'])->simplePaginate(5);
    return view('user-index',compact('users'));
    

    【讨论】:

    • 谢谢戴维特,它成功了:)。我在这里有个问题。以防万一用户中的区域ID不在该区域中,我将如何显示错误-
    • 能否请您突出显示
    • $users = Users::with('area')->with('district')->simplePaginate(5); 如果您更改关系名称 else $users = Users::with('areas')->with('districts')->simplePaginate(5);
    • 我只是将其更新为 $users = Users::simplePaginate(5);。它的工作。我要解决这个问题吗??
    • 当你使用Users::simplePaginate(5); db查询中的那个case必须执行11次。但是当你使用$users = Users::with('areas')->with('districts')->simplePaginate(5);时必须执行3次
    【解决方案3】:

    在你的控制器中试试这个

    $users = Users::with('areas')->with('districts')->simplePaginate(5);
    return view('user-index',compact('users'));
    

    编辑答案:

    用户模型中:

    public function districts() {
        return $this->belongsTo('App\Districts','district_id','id');
    }
    

    地区型号:

    public function areas() {
        return $this->belongsTo('App\Area','district_id','id');
    }
    

    在你的Controller中,你会像这样获取关系:

    $users = Users::with('districts.areas')->simplePaginate(5);
    return view('user-index',compact('users'));
    

    希望对你有所帮助。

    【讨论】:

    • 还是同样的错误,也清除了缓存(app,view,route)
    • @mightyteja 我编辑了我的答案,现在试试这个解决方案。
    • 这也有效,我在这里有个问题。以防万一用户中有区域ID,我将如何显示错误
    • 您的问题的答案很简单,在您的情况下,区域取决于区域,因此区域与区域之间的关系定义而不是用户与区域之间的关系............ User 属于District 属于Area.......这是正确的关系。
    猜你喜欢
    • 2020-10-01
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    相关资源
    最近更新 更多