Попытка получить свойство '' необъекта (Просмотр: - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь выбрать пользователя на основе его соответствующего района / района по идентификатору, сохраненному в пользовательской таблице,

Я могу получить результат для района, где для Района я получаюошибка,

Попытка получить свойство 'area_name' не-объекта (View: user-index.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

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019

Ошибка возникает из-за того, что у этого пользователя нет области.Для исправления используйте это

@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'));
0 голосов
/ 28 февраля 2019

Попробуйте в вашем контроллере

$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
0 голосов
/ 28 февраля 2019

Попробуйте это в вашем контроллере:

$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');
}

И В вас Контроллер , вы получите отношение следующим образом:

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

Надеюсь, это будет полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...