我设计了表单来在 Laravel 中保存数据这个问题向我展示了以下错误此集合实例上不存在属性 [id]。这是我的代码控制器public function create () { $post = Post::all(); return view ("post.create",compact('post')); }查看 create.blade.php<form action="{{url()->action ('PostController@store', ['id'=>$post->id])}}" method="POST"><input type="text" name="title" placeholder="Write Title"><input type="text" name="body" placeholder="Write Body"><input type="submit" value="Submit" name="submit"></form>我知道问题出在这里,但我不知道我能做什么 'PostController@store', ['id'=>$post->id])}}" method="POST"
3 回答
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
这将返回集合
$post = Post::all();
相反,通过使用将一个对象传递给视图
$post = Post::first();
或者如果你想检查特定的帖子或任何其他条件,你可以使用 where 子句。
eg: $post = Post::where('id',$user_id)->first(); // It will return single row...It will solve your problem
牧羊人nacy
TA贡献1862条经验 获得超7个赞
问题是您正在向您的视图发送一组Post模型。该$post
变量包含一个集合的帖子车型,这意味着集合不会有id
,因为它是一个集合,而不是一个单一的帖子。
这个:
$post = Post::all();
返回一个集合。
因为这是一个 create 方法,你可能希望新建一个Post模型:
$post = new Post();
并在其中添加一些内容并在发送到视图之前保存它以获得一个id
,或者,可能更有用:您可以在没有表单模型绑定的情况下打开表单,因为您实际上还没有创建Post模型 -只是取出['id'=>$post->id]
部分由于不存在post
有一个id
在创建形式的时间。
慕虎7371278
TA贡献1802条经验 获得超4个赞
你可以让它看起来更干净的路线。
网页.php
Route::post('/myform/store', 'PostController@store')->name('post.store');
在您的视图中,您可以使用刚刚创建的路线名称。
<form action="{{ route('post.store', ['id' => $post->id]) }}" method="post">
但是由于您没有“id”列,Post
因此它会返回您收到的错误。首先尝试创建列“id”来解决您的问题。
我同意 @Watercayman 使用模型绑定代替,它很快并且使代码更具可读性(也更易于理解)。由于 Laravel 很快将 'id' 与数据库中的唯一 id 匹配。看看 这里的路由参数(如何通过网址传递的数据),以及如何访问您的参数在这里。
使用模型绑定将返回一个集合。
public function store(Post $post)
你的$post
变量是一个集合,所以如果你想访问你的“id”列,你会这样做$post->id
。
- 3 回答
- 0 关注
- 182 浏览
添加回答
举报
0/150
提交
取消