是什么触发了 "Trying to get property of non-object" 错误
What triggers the "Trying to get property of non-object" error
自从我开始我的第一个 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'));
每当我按下下载 link 时,我都会看到带有 trying to get property 'column' of non-object (View: /usr/src/workapp/resources/views/pdf/pdfgen.blade.php)
的糟糕页面。为什么我收到此错误而不是 open/save 对话框?
编辑:忘记添加,在尝试使用 $id 获取特定数据之前,我调用了整个 table ($data = Table::all();
) 并在 [=28] 中使用了 @foreach
=] 查看以在 table
中打印它
编辑 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');
}
}
发生这种情况是因为您的 $data
可能是 null
而您的给定 $id
的记录可能不存在于您的数据库中。
尝试像下面这样更改您的代码:
Table::findOrFail($id);
从现在开始,如果给定 ID 的 table 不存在,它将自动 return 404
页面。
当您执行 find($id)
并且记录不存在时,它 returns null
。因此,如果您尝试访问任何 属性 ->column
,它将抛出错误。
你可以做findOrFail($id)
或有条件if (is_null($data))
或在前端有$data->column ?? 'defaultvalue
'
现在,第二种情况,您的模型存在但仍然出现错误,请执行:
$data = Table::find($id);
dd(array_keys($data->toArray()));
您应该会看到您尝试访问的 column
(如果存在)。
最后,如果它不存在于上述步骤中但存在于 table 中,则检查模型的 protected $hidden = []
设置,该设置实际上隐藏了某些列。
自从我开始我的第一个 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'));
每当我按下下载 link 时,我都会看到带有 trying to get property 'column' of non-object (View: /usr/src/workapp/resources/views/pdf/pdfgen.blade.php)
的糟糕页面。为什么我收到此错误而不是 open/save 对话框?
编辑:忘记添加,在尝试使用 $id 获取特定数据之前,我调用了整个 table ($data = Table::all();
) 并在 [=28] 中使用了 @foreach
=] 查看以在 table
编辑 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');
}
}
发生这种情况是因为您的 $data
可能是 null
而您的给定 $id
的记录可能不存在于您的数据库中。
尝试像下面这样更改您的代码:
Table::findOrFail($id);
从现在开始,如果给定 ID 的 table 不存在,它将自动 return 404
页面。
当您执行 find($id)
并且记录不存在时,它 returns null
。因此,如果您尝试访问任何 属性 ->column
,它将抛出错误。
你可以做findOrFail($id)
或有条件if (is_null($data))
或在前端有$data->column ?? 'defaultvalue
'
现在,第二种情况,您的模型存在但仍然出现错误,请执行:
$data = Table::find($id);
dd(array_keys($data->toArray()));
您应该会看到您尝试访问的 column
(如果存在)。
最后,如果它不存在于上述步骤中但存在于 table 中,则检查模型的 protected $hidden = []
设置,该设置实际上隐藏了某些列。