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

我设计了表单来在 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"


长风秋雁
浏览 183回答 3
3回答

慕尼黑5688855

这将返回集合&nbsp;$post&nbsp;=&nbsp;Post::all();相反,通过使用将一个对象传递给视图$post&nbsp;=&nbsp;Post::first();或者如果你想检查特定的帖子或任何其他条件,你可以使用 where 子句。eg:&nbsp;$post&nbsp;=&nbsp;Post::where('id',$user_id)->first();&nbsp;//&nbsp;It&nbsp;will&nbsp;return&nbsp;single&nbsp;row...It&nbsp;will&nbsp;solve&nbsp;your&nbsp;problem

牧羊人nacy

问题是您正在向您的视图发送一组Post模型。该$post变量包含一个集合的帖子车型,这意味着集合不会有id,因为它是一个集合,而不是一个单一的帖子。这个:$post&nbsp;=&nbsp;Post::all();返回一个集合。因为这是一个 create 方法,你可能希望新建一个Post模型:$post&nbsp;=&nbsp;new&nbsp;Post();并在其中添加一些内容并在发送到视图之前保存它以获得一个id,或者,可能更有用:您可以在没有表单模型绑定的情况下打开表单,因为您实际上还没有创建Post模型 -只是取出['id'=>$post->id]部分由于不存在post有一个id在创建形式的时间。

慕虎7371278

你可以让它看起来更干净的路线。网页.phpRoute::post('/myform/store',&nbsp;'PostController@store')->name('post.store');在您的视图中,您可以使用刚刚创建的路线名称。<form&nbsp;action="{{&nbsp;route('post.store',&nbsp;['id'&nbsp;=>&nbsp;$post->id])&nbsp;}}"&nbsp;method="post">但是由于您没有“id”列,Post因此它会返回您收到的错误。首先尝试创建列“id”来解决您的问题。我同意 @Watercayman 使用模型绑定代替,它很快并且使代码更具可读性(也更易于理解)。由于 Laravel 很快将 'id' 与数据库中的唯一 id 匹配。看看&nbsp;这里的路由参数(如何通过网址传递的数据),以及如何访问您的参数在这里。使用模型绑定将返回一个集合。public&nbsp;function&nbsp;store(Post&nbsp;$post)你的$post变量是一个集合,所以如果你想访问你的“id”列,你会这样做$post->id。
打开App,查看更多内容
随时随地看视频慕课网APP