Когда у Родителя нет ребенка в отношениях один ко многим, я получаю необъектную ошибку при проверке этого - PullRequest
0 голосов
/ 30 мая 2018

У меня есть «Родительская» таблица (сервер) и «Дочерняя» таблица (Состояние сервера), статус сервера связан с таблицей сервера через его идентификатор, например, серверы id совпадают с server_id вмиграция состояния сервера с использованием отношения один ко многимЗатем я пытаюсь просмотреть список серверов, а затем отобразить состояние сервера, которое хранится в таблице состояния сервера.По какой-то причине я получаю необъектную ошибку при попытке перебрать сервер, который не имеет статуса.Это работает тогда, когда сервер имеет соответствующий ему статус, но не тогда, когда у меня есть только сервер и нет статуса.Кто-нибудь может дать мне некоторое представление о том, почему это может происходить?Вот текущий код для контроллера, вызывающего это представление, и цикл, используемый для итерации по данным.

index.blade.php:

@guest  
 @if(count($servers) > 0)
   @foreach($servers as $server)
     @if($server->isPublic === 1 )
        @include('inc.statuses')
     @endif
   @endforeach
 @endif
@endguest

@auth
 @if(count($servers) > 0)
   @foreach($servers as $server)
     @include('inc.statuses') 
   @endforeach
 @endif
@endauth

statuses.blade.php:

@if($server->serverStatus->last()->status_id === 1)
    <a href="/servers/{{$server->id}}"  class="text-dark list-group-item list-group-item-success">{{$server->name}}</a>
@elseif($server->serverStatus->last()->status_id === 2)
    <a href="/servers/{{$server->id}}" class="text-dark list-group-item list-group-item-warning" >{{$server->name}}</a>
@elseif($server->serverStatus->last()->status_id === 3)
    <a href="/servers/{{$server->id}}" class="text-dark list-group-item list-group-item-danger" >{{$server->name}}</a>
@elseif($server->serverStatus->last()->status_id === 4)
    <a href="/servers/{{$server->id}}" class="text-dark list-group-item list-group-item-warning" >{{$server->name}} is under maintinance</a>
@elseif($server->serverStatus->last()->status_id === null)
    <a href="/servers/{{$server->id}}" class="text-dark list-group-item list-group-item-warning" >{{$server->name}} has no inputted staus</a>
@else
    <a href="/servers/{{$server->id}}" class="text-dark list-group-item list-group-item-warning" >{{$server->name}} has no inputted staus</a>
@endif

контроллер:

public function index(){
        $servers = Server::orderBY('created_at', 'desc')->get();

        // foreach($servers as $server){
        //     var_dump($server->name);
        //     var_dump($server->serverStatus->last()->status_id);
        //     var_dump($server->serverStatus->last()->server_id);
        // }

        $incidents = Incident::orderBY('created_at', 'desc')->paginate(10);

        return view('pages.index', ['incidents' => $incidents, 'servers' => $servers]);
    }

1 Ответ

0 голосов
/ 30 мая 2018

Используйте $servers = Server::has('serverStatus')->orderBY('created_at', 'desc')->get();, чтобы получить только серверы со статусом.

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