Как исправить ошибку «Попытка получить свойство необъекта» в Laravel 5.4 - PullRequest
0 голосов
/ 07 января 2019

Пожалуйста, помогите мне исправить ошибку в laravel 5.4, Я хочу построить доступность таблицы с помощью этого кода.

<table class="table table-bordered">
        <thead>
                <tr>
                    <th scope="col">#</th>
                    @for($tanggal=1; $tanggal<=14; $tanggal++)
                    <th scope="col">{{$tanggal}}</th>
                    <!-- str_pad($tanggal, 2, "0", STR_PAD_LEFT) -->
                    @endfor
                </tr>
        </thead>
        <tbody>
                @foreach($times as $time)
                <tr>
                    <td>{{$time}}</td>

                    @for($tanggal=1; $tanggal<=14; $tanggal++) 
                    <td scope="row">  
                            {{App\Bookreport::where('book_date','=', '2019-01-'.$tanggal)->where('book_time','=',$time)->first()->book_time}}
                    </td>

                    @endfor
                </tr>
                @endforeach
        </tbody>
    </table>

Ошибка «Попытка получить свойство необъекта»

В очереди

{{App\Bookreport::where('book_date','=', '2019-01-'.$tanggal)->where('book_time','=',$time)->first()->book_time}}

Ответы [ 5 ]

0 голосов
/ 07 января 2019

Всегда, когда вы не уверены в существовании записи в базе данных, вы должны использовать:

count () или isEmpty ()

и, если он существует, получите его по

первый ()

0 голосов
/ 07 января 2019

Вы должны попробовать это:

<table class="table table-bordered">
        <thead>
                <tr>
                    <th scope="col">#</th>
                    @for($tanggal=1; $tanggal<=14; $tanggal++)
                    <th scope="col">{{$tanggal}}</th>
                    <!-- str_pad($tanggal, 2, "0", STR_PAD_LEFT) -->
                    @endfor
                </tr>
        </thead>
        <tbody>
                @foreach($times as $time)
                <tr>
                    <td>{{$time}}</td>

                    @for($tanggal=1; $tanggal<=14; $tanggal++) 
                    <td scope="row">  

<?php 
$bookReport = App\Bookreport::where('book_date','=', '2019-01-'.$tanggal)->where('book_time','=',$time)->first();
?>

{{$bookReport->book_time}}
                    </td>

                    @endfor
                </tr>
                @endforeach
        </tbody>
    </table>
0 голосов
/ 07 января 2019

Изменить эту строку

{{App\Bookreport::where('book_date','=', '2019-01-'.$tanggal)->where('book_time','=',$time)->first()->book_time}}

Для

<?php 
$bookReport = App\Bookreport::where('book_date','=', '2019-01-'.$tanggal)->where('book_time','=',$time)->first();
?>
@if($bookReport!=null)
{{$bookReport->book_time}}
@else

@endif
0 голосов
/ 07 января 2019

Простое решение вашей проблемы состоит в том, чтобы изменить это:

{{App\Bookreport::where('book_date','=', '2019-01-'.$tanggal)->where('book_time','=',$time)->first()->book_time}}

Кому:

{{App\Bookreport::where('book_date','=', '2019-01-'.$tanggal)->where('book_time','=',$time)->first()->book_time ?? ''}}

Но на самом деле это не лучшее решение!

лучший способ - отправить данные с контроллера на просмотр, чтобы вы запрашивали данные на контроллере и передавали их на просмотр. в вашем контроллере:

$from = date('2019-01-01');
$to = date('2019-01-14');

$books = App\Bookreport::whereBetween('book_date',[$from, $to])->whereIn('book_time',$times);

return view('some_view')->withBooks($books);

затем, по вашему мнению, просто переберите переменную $books и напечатайте результаты.

P.S. этот код не проверен, может потребоваться некоторые модификации.

Надеюсь, это поможет

0 голосов
/ 07 января 2019

Проверить эту строку

 {{App\Bookreport::where('book_date','=', '2019-01-'.$tanggal)->where('book_time','=',$time)->first()->book_time}}

когда вы используете first(), он не возвращает Std Class object. Если вы так хотите, используйте get()

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