0

最初の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'));

そのダウンロード リンクを押すたびに、trying to get property 'column' of non-object (View: /usr/src/workapp/resources/views/pdf/pdfgen.blade.php). 開く/保存ダイアログではなく、このエラーが表示されるのはなぜですか?

編集: $id で特定のデータを取得しようとする前に、追加するのを忘れました。テーブル全体 ( $data = Table::all();)を呼び出し@foreach、ブレード ビューで a を使用してテーブルに出力しました。

編集 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');
    }
}
4

2 に答える 2

2

実行find($id)してレコードが存在しない場合は、 を返しますnull。したがって、任意のプロパティにアクセスしようとすると->column、エラーがスローされます。

条件を実行findOrFail($id) または実行するif (is_null($data)) 、フロントエンドで実行できます$data->column ?? 'defaultvalue '

さて、モデルは存在するが、それでもエラーが発生する 2 番目の状況では、次のようにします。

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

column存在する場合は、アクセスしようとしている が表示されます。

最後に、上記のステップには存在しないがテーブルには存在する場合は、protected $hidden = []特定の列を本質的に非表示にするモデルの設定を確認してください。

于 2019-02-15T00:42:47.617 に答える