Php Laravel 5.5-尝试获取非对象的属性

Php Laravel 5.5-尝试获取非对象的属性,php,laravel,routes,Php,Laravel,Routes,我正在尝试更新数据,但不断收到以下错误消息: “正在尝试获取非对象的属性(视图:C:\xampp\htdocs\blog\resources\views\update.blade.php)” 这是我的update.blade.php文件 @extends ('layout') @section ('title') Update page @stop @section ('content') <div class="row"> <div class="col-

我正在尝试更新数据,但不断收到以下错误消息: “正在尝试获取非对象的属性(视图:C:\xampp\htdocs\blog\resources\views\update.blade.php)”

这是我的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
最后是我的更新路线:

Route::get('/todo/update/{id}', 'TodosController@update')-
>name('todo.update');

这只是一些基本的东西,但我现在在这里停留了几个小时,非常感谢您的帮助

如果
todo
为FALSE或其他非对象,则会发生该错误


您可以使用
var\u dump($todo)检查它;模具()

如果$todo为空,则在控制器上使用
findOrFail
方法引发异常

public function update($id){

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

    return view('update', compact('todo'));  
}
问题也出现在
update.blade.php
文件上
对于每个$todo作为todo
$todo
有雄辩模型还是雄辩模型的集合?我认为这是一个雄辩的模型。所以循环没有任何意义

find()
将返回
null
或找到的模型。假设找到了模型,您将对该模型执行for-each(
foreach($todo…
)操作,这将迭代模型的公共属性。这显然不是你想要做的

在我看来,您似乎正在尝试循环查看您的待办事项列表,并打印出编辑/删除链接。如果是这种情况,您需要在控制器中获取TODO列表,将其传递到视图中,并修复
foreach
语句

控制器:

public function update($id){

    //dd($id);

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

    return view('update')->with('todo', $todo);  
}
$todos = Todo::get();
// pass to view
视图:


如果您添加有关错误的更多详细信息,例如导致此错误的行号,则会有所帮助。我从未尝试过类似的方法,但我想
foreach($todo as$todo)
可能会导致一些问题,因为您的两个变量都命名为
$todo
。我已经尝试过重命名它,但没有成功。下面是导致错误消息的代码部分(我不喜欢前面没有提到它),todo.delete、todo.update和id被报告为错误。在我看来,这是一些路由相关的问题。它只是不断给我同样恼人的错误消息。我得到todo是对象的确认。只要你调用
foreach($todo as$todo)
我看到其他人告诉过您,您正在用对象的第一个属性覆盖对象。该循环在第一次迭代时中断了变量。
foreach ($todos as $todo)