2017-12-23 24 views
-2

データを更新しようとしていますが、このエラーメッセージが表示され続けます: "オブジェクト以外のプロパティを取得しようとしています(ビュー:C:\ xampp \ htdocs \ blog \ resources \ views \ update.blade.php)」を参照してください。Laravel 5.5 - 非オブジェクトのプロパティを取得しようとしています

これは

@extends ('layout') 

@section ('title') 

Update page 

@stop 

@section ('content') 

<div class="row"> 

    <div class="col-lg-12"> 

     <form action="/todo/save" method="post"> 

      {{ csrf_field() }} 

      <input type="text" class="form-control input-lg" name="todo" 
value="{{ $todo->todo }}" placeholder="Type in to create a new todo"> 

     </form> 

    </div> 

</div> 

<hr> 

@foreach ($todo as $todo) 

    {{ $todo->todo }} <a href="{{ route('todo.update', ['id' =>$todo->id]) 
}}" class="btn btn-info btn-sm">Update</a> <a href="{{ route('todo.delete', 
['id' =>$todo->id]) }}"class="btn btn-danger">Delete</a> 

    <hr> 

@endforeach 

@stop 

私のコントローラ私update.blade.phpファイルです:これは単にいくつかの基本的なものである

Route::get('/todo/update/{id}', '[email protected]')- 
>name('todo.update'); 

、:

public function update($id){ 

    //dd($id); 

    $todo = Todo::find($id); 

    return view('update')->with('todo', $todo); 
} 

、最終的に私の更新ルートしかし、私は今ここに数時間拘束されており、どんな助けも高く評価されています!

+0

あなたは、このエラーが発生した行番号のように、エラーの詳細を追加する場合、それが役立つだろう。そして、私はそのようなことを試みたことはありませんでしたが、 'foreach($ todo as $ todo)'は両方の変数が '$ todo'という名前になっているのでいくつかの問題を引き起こす可能性があります。 – Nima

+0

Ivはすでに名前を変更しようとしましたが、運がありません。ここでは、エラーメッセージの原因となるコードの一部があります(前に言及していないと悪いです)。 <?php echo e($ todo-> todo); ?>UpdateDelete todo.delete、todo.updateおよびidはエラーとして報告されます。 –

答えて

0

todoがFALSEまたはその他の非オブジェクトの場合、このエラーが発生します。

コントローラーのvar_dump($todo);die();で検査できます。

+0

Todoがオブジェクトであることを確認します。 –

+0

'foreach($ todo as $ todo)'を呼び出すとすぐに、あなたは他の人に話されているのを見て、オブジェクトを最初のプロパティで上書きします。そのループは最初の反復で変数を分割します。 – sorak

1

使用して、コントローラ上のfindOrFail方法に問題があなたのupdate.blade.phpファイルにもあり

public function update($id){ 

    $todo = Todo::findOrFail($id); 

    return view('update', compact('todo')); 
} 

$のTODOが空の場合に例外をスローします。 foreach $todo as todo$todoには雄弁なモデルや雄弁なモデルのコレクションがありますか?私はそれが雄弁なモデルだと思う。ループには意味がありません。

+0

私はそれを試して、同じ結果で戻ってきました。 –

+0

私はいくつかのルート関連の問題だと思われます。 –

+0

私は答えを編集しました! – Goms

0

find()は、nullまたは見つかったモデルのいずれかを返します。モデルが見つかったと仮定すると、モデルの公開プロパティを反復処理するモデル(foreach ($todo...))でそれぞれを実行しています。これは明らかにあなたがするつもりではありません。

私はあなたのtodosのリストをループして編集/削除リンクを印刷しようとしているようです。このような場合は、あなたのコントローラのあなたのtodosのリストを取得し、あなたのビューに渡し、foreachステートメントを修正する必要があります。

コントローラー:

$todos = Todo::get(); 
// pass to view 

ビュー:

foreach ($todos as $todo) 
関連する問題