2017-12-23 5 views
-2

데이터를 업데이트하려고하는데이 오류 메시지가 계속 나타납니다. "비 객체의 속성을 얻으려고합니다 (보기 : C : \ xampp \ htdocs \ 블로그 \ 리소스 \ 전망 \ update.blade.php) ".Laravel 5.5 - 비 객체의 속성을 얻으려고 시도합니다.

이 내 update.blade.php 파일

입니다
@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 

내 컨트롤러 :

public function update($id){ 

    //dd($id); 

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

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

그리고 마지막으로 내 업데이트 경로 :

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

이 단지 몇 가지 기본적인 것들입니다, 하지만 메신저 몇 시간 동안 여기에 갇혀 있고, 어떤 도움을 매우 높이 평가됩니다!

+0

이 오류를 발생시키는 행 번호와 같은 오류에 대한 자세한 내용을 추가하는 경우 그것은 도움이 될 것이다. 그리고 난 그런 식으로 시도한 적이 없지만'foreach ($ todo as $ todo) '변수는 모두'todo'라는 이름으로 인해 문제를 일으킬 수 있습니다. – Nima

+0

Iv는 이름 바꾸기를 시도했지만 운이 없습니다. 다음은 오류 메시지의 원인이되는 코드 부분입니다 (이전에 언급하지 않은 것이 좋지 않음). todo); ?>UpdateDelete todo.delete, todo.update 및 id는 오류로보고됩니다. –

답변

0

todo이 FALSE 또는 기타 비 개체 일 경우 오류가 발생합니다.

컨트롤러에서 var_dump($todo);die();으로 검사 할 수 있습니다. $의 할 일이 문제가 update.blade.php 파일에 있습니다

public function update($id){ 

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

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

비어있는 경우 컨트롤러에

+0

할일이 개체라는 확인을받습니다. –

+0

'foreach ($ todo as $ todo)'를 호출하자마자, 다른 사람들이 들었던 것처럼 처음 속성을 가진 객체를 덮어 쓰게됩니다. 이 루프는 첫 번째 반복에서 변수를 나눕니다. – sorak

1

사용 findOrFail 메소드는 예외를 throw합니다. foreach $todo as todo, $todo에는 웅변 모델 또는 웅변 모델 모음이 있습니까? 나는 그것이 웅변적인 모델이라고 생각한다. 따라서 루프에는 의미가 없습니다.

+0

나는 그것을 시도하고 같은 결과로 돌아왔다. –

+0

일부 경로 관련 문제인 것처럼 보입니다. –

+0

답변을 편집했습니다. – Goms

0

find()null 또는 발견 된 모델을 반환합니다. 모델이 발견되었다고 가정하면 모델의 공개 속성을 반복 할 모델 (foreach ($todo...))에 대해 각각을 수행합니다. 이것은 분명히하려는 의도가 아닙니다.

당신이 할 일 목록을 반복하고 편집/삭제 링크를 인쇄하려고하는 것처럼 보입니다. 이 경우 컨트롤러에 할 일 목록을 가져 와서보기에 전달하고 foreach 문을 수정해야합니다.

컨트롤러 :

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

보기 :

foreach ($todos as $todo)