Что вызывает ошибку «Попытка получить свойство необъекта» - PullRequest
0 голосов
/ 14 февраля 2019

С тех пор, как я начал свой первый проект Laravel, у меня была ошибка Trying to get property 'column_name' of non-object без остановки, и большую часть времени я мог ее исправить так или иначе, но проблема в том, что я понятия не имею,почему я получаю ошибку, или как я могу ее предотвратить.Например,

// In my controller I have this domPDF function...
public function pdfgen(Request $request, $id) {
        $data = Table::find($id);
        View()->share('data', $data);

        if ($request -> has('download')) {
            $pdf = PDF::loadView('pdf/pdfgen');
            return $pdf ->download('pdfgen.pdf');
        }

        return view('pdf/pdfgen');
}
// In my blade file I have a table calling this column...
<td>{{ $data->column }}</td>

// and this link making the request in the pdfgen function... 
<a class="btn btn-primary" href="{{ route('pdfgen', ['download'=>'pdf']) }}">Download PDF</a>
// And in my routes of web.php...
Route::get('/pdfgen/{id}', array('as' => 'pdfgen', 'uses' => 'PDFController@pdfgen'));

и всякий раз, когда я нажимаю эту ссылку для скачивания, я получаю страницу Whoops с trying to get property 'column' of non-object (View: /usr/src/workapp/resources/views/pdf/pdfgen.blade.php).Почему я получаю эту ошибку, а не диалог открытия / сохранения?

РЕДАКТИРОВАТЬ: Забыл добавить, прежде чем пытаться получить конкретные данные с $ id, я вызвал всю таблицу ($data = Table::all();) и использовал @foreach в виде лезвия, чтобы распечатать его в таблице

РЕДАКТИРОВАТЬ 2: Добавление модели

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Table extends Model
{
    protected $table = 'table';
    protected $primaryKey = 'id';
    public $incrementing = false;

    protected $fillable = [
        // all columns are strings, even id
        'id',
        'column',
        'column2',
        'column3',
    ];

    public function table2()
    {
        return $this->hasMany('App\Table2');
    }
}

Ответы [ 2 ]

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

Когда вы делаете find($id), а запись отсутствует, возвращается null.Поэтому, если вы попытаетесь получить доступ к любому свойству ->column, оно выдаст ошибку.

Вы можете выполнить findOrFail($id) или , включив условие if (is_null($data)) или во втором интерфейсе есть $data->column ?? 'defaultvalue '

Теперь, во второй ситуации, когда ваша модель присутствует, но вы все еще получаете ошибку, выполните:

$data = Table::find($id);
dd(array_keys($data->toArray()));

Вы должны увидеть column, к которому вы пытаетесь обратитьсяесли он присутствует.

Наконец, если он отсутствует на предыдущем шаге, но присутствует в таблице, проверьте настройку protected $hidden = [] вашей модели, которая по существу скрывает определенные столбцы.

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

Это произошло потому, что ваш $data может быть null, а ваша запись с указанным $id может отсутствовать в вашей базе данных.

Попробуйте изменить свой код, как показано ниже:

Table::findOrFail($id);

С этого момента, если ваша таблица с указанным идентификатором не существует, она автоматически вернет страницу 404.

...