为了账号安全,请及时绑定邮箱和手机立即绑定

属性 [id] 在表单中的此集合中不存在

属性 [id] 在表单中的此集合中不存在

PHP
长风秋雁 2021-11-26 19:44:32
我设计了表单来在 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



查看完整回答
反对 回复 2021-11-26
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

问题是您正在向您的视图发送一组Post模型。该$post变量包含一个集合帖子车型,这意味着集合不会有id,因为它是一个集合,而不是一个单一的帖子

这个:

$post = Post::all();

返回一个集合

因为这是一个 create 方法,你可能希望新建一个Post模型:

$post = new Post();

并在其中添加一些内容并在发送到视图之前保存它以获得一个id或者,可能更有用:您可以在没有表单模型绑定的情况下打开表单,因为您实际上还没有创建Post模型 -只是取出['id'=>$post->id]部分由于不存在post有一个id在创建形式的时间。


查看完整回答
反对 回复 2021-11-26
?
慕虎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


查看完整回答
反对 回复 2021-11-26
  • 3 回答
  • 0 关注
  • 182 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信