2017-12-23 5 views
-2

Ich versuche, meine Daten zu aktualisieren, aber ich bekomme immer diese Fehlermeldung: "Versuch, Eigenschaft von Nicht-Objekt (Ansicht: C: \ xampp \ htdocs \ Blog \ Ressourcen \ Ansichten \ update.blade.php) ".Laravel 5.5 - Versuch, die Eigenschaft von Nichtobjekt zu erhalten

Diese Datei mein update.blade.php ist

@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 

mein Controller:

public function update($id){ 

    //dd($id); 

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

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

und meine Update Route schließlich:

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

Dies ist nur ein paar grundlegende Dinge, aber ich bin jetzt für ein paar Stunden hier drin, und jede Hilfe wird sehr geschätzt!

+0

Es würde helfen, wenn Sie weitere Informationen über den Fehler, wie die Zeilennummer hinzufügen, die diesen Fehler verursacht. Und ich habe noch nie so etwas probiert, aber ich denke, 'foreach ($ todo as $ todo)' könnte einige Probleme verursachen, da beide Variablen den Namen $ todo haben. – Nima

+0

Ich habe versucht, es bereits umzubenennen, aber ohne Glück. Hier ist der Teil des Codes (mein Fehler, ihn nicht früher zu erwähnen), der die Fehlermeldung verursacht: todo); ?>UpdateDelete todo.delete, todo.update und id werden als Fehler gemeldet. –

Antwort

0

Dieser Fehler würde auftreten, wenn todo FALSE oder ein anderes Nicht-Objekt waren.

Sie können es mit einer var_dump($todo);die(); in der Steuerung überprüfen.

+0

Ich bekomme die Bestätigung, dass ich ein Objekt bin. –

+0

Sobald Sie 'foreach ($ todo als $ todo) aufrufen' 'überschreiben Sie das Objekt mit seiner ersten Eigenschaft, wie Sie von anderen erfahren haben. Diese Schleife unterbricht Ihre Variable in der ersten Iteration. – sorak

1

Verwenden findOrFail Methode auf dem Controller eine Ausnahme zu werfen, wenn $ todo

public function update($id){ 

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

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

Das Problem leer ist, ist auch auf Ihrer update.blade.php Datei. foreach $todo as todo, $todo hat eine Sammlung von eloquent Modell oder beredtes Modell? Ich denke, es ist ein beredtes Modell. Eine Schleife hat also keinen Sinn.

+0

Ich habe es versucht und es kam mit dem gleichen Ergebnis zurück. –

+0

scheint mir, dass es ein routenbezogenes Problem ist. –

+0

Ich habe die Antwort bearbeitet! – Goms

0

find() gibt entweder null oder das gefundene Modell zurück. Unter der Annahme, dass das Modell gefunden wurde, machst du für jedes Modell ein Modell (foreach ($todo...)), das über die öffentlichen Eigenschaften des Modells iteriert. Dies ist offensichtlich nicht das, was Sie beabsichtigen zu tun.

Es sieht für mich aus, als ob Sie versuchen, eine Liste Ihrer Todos zu durchlaufen und Links zum Bearbeiten/Löschen auszudrucken. Wenn dies der Fall ist, müssen Sie die Liste Ihrer Todos in Ihrem Controller abrufen, sie an Ihre Ansicht übergeben und Ihre foreach-Anweisung korrigieren.

Controller:

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

Ausblick:

foreach ($todos as $todo) 
Verwandte Themen