尝试获取 属性 'description' 的非对象 Laravel 6
Trying to get property 'description' of non-object Laravel 6
我是 Laravel 的新手,我目前正在尝试制作一个 Todos 应用程序。但是,当我尝试从模型中读取并在 Blade 文件中显示时,出现此错误:
"Trying to get property 'description' of non-object"
web.php
Route::get('/{todo}', 'TodosController@show');
TodosController.php
public function show($todoId){
$todos = Todo::find($todoId);
return view('todos.show', compact('todos'));
}
show.blade.php
@foreach ($todos as $todo)
<li class="list-group-item">
{{ $todo->description }}
</li>
@endforeach
错误在{{ $todo->description }}
我看到过类似的问题,但是我看不懂所以请帮助我。我想知道为什么会出现这个错误,我该如何解决?
$todos = Todo::find($todoId);
将为您提供 Todo
的单个实例。在您看来,您正在遍历您期待 Todos
的数组或集合的内容
您可以删除视图中的 foreach 循环或将 Todo
查询更改为:
$todos = Todo::where('id', $todoId)->get()
这将为您提供一个包含在集合中的单个 Todo
,允许您的循环获取集合中的单个 Todo
实例。
问题是,当您将模型实例传递给循环时,它会开始循环遍历属性。然后你试图在另一个不存在的 属性 上获取 属性。
您需要将数组或集合传递给循环,以便每个项目都是具有有效属性的实例。
转储以查看可用于获取数据的方法的结果可能会有所帮助
dump(
Todo::all(),
Todo::where('id', $todoId)->get(),
Todo::find($todoId)
);
您将看到前两个 return 集合,它们在您传递给 foreach 时起作用。
第二个 return 是 Todo
的一个实例,它可以传递给您的循环,但如果实例形成集合,则循环然后从实例中提取属性。你想要后者。
试试这个
public function show($todoId){
$todos = Todo::where('id', $todoId)->get();
return view('todos.show', compact('todos'));
}
TodosController.php
public function show($todoId){
$todos = Todo::find($todoId)->get()->first();
return view('todos.show', compact('todos'));
}
show.blade.php
<li class="list-group-item">
{{ $todos['description'] }}
</li>
no need to use foreach loop
您的代码是正确的,但还要添加一个模型名称,例如
public function show(Todo $todoId){
$todos = Todo::find($todoId);
return view('todos.show', compact('todos'));
}
这是 laravel 使用同一控制器时使用的默认值
我是 Laravel 的新手,我目前正在尝试制作一个 Todos 应用程序。但是,当我尝试从模型中读取并在 Blade 文件中显示时,出现此错误:
"Trying to get property 'description' of non-object"
web.php
Route::get('/{todo}', 'TodosController@show');
TodosController.php
public function show($todoId){
$todos = Todo::find($todoId);
return view('todos.show', compact('todos'));
}
show.blade.php
@foreach ($todos as $todo)
<li class="list-group-item">
{{ $todo->description }}
</li>
@endforeach
错误在{{ $todo->description }}
我看到过类似的问题,但是我看不懂所以请帮助我。我想知道为什么会出现这个错误,我该如何解决?
$todos = Todo::find($todoId);
将为您提供 Todo
的单个实例。在您看来,您正在遍历您期待 Todos
您可以删除视图中的 foreach 循环或将 Todo
查询更改为:
$todos = Todo::where('id', $todoId)->get()
这将为您提供一个包含在集合中的单个 Todo
,允许您的循环获取集合中的单个 Todo
实例。
问题是,当您将模型实例传递给循环时,它会开始循环遍历属性。然后你试图在另一个不存在的 属性 上获取 属性。 您需要将数组或集合传递给循环,以便每个项目都是具有有效属性的实例。
转储以查看可用于获取数据的方法的结果可能会有所帮助
dump(
Todo::all(),
Todo::where('id', $todoId)->get(),
Todo::find($todoId)
);
您将看到前两个 return 集合,它们在您传递给 foreach 时起作用。
第二个 return 是 Todo
的一个实例,它可以传递给您的循环,但如果实例形成集合,则循环然后从实例中提取属性。你想要后者。
试试这个
public function show($todoId){
$todos = Todo::where('id', $todoId)->get();
return view('todos.show', compact('todos'));
}
TodosController.php
public function show($todoId){
$todos = Todo::find($todoId)->get()->first();
return view('todos.show', compact('todos'));
}
show.blade.php
<li class="list-group-item">
{{ $todos['description'] }}
</li>
no need to use foreach loop
您的代码是正确的,但还要添加一个模型名称,例如
public function show(Todo $todoId){
$todos = Todo::find($todoId);
return view('todos.show', compact('todos'));
}
这是 laravel 使用同一控制器时使用的默认值