получить доступ к функции редактирования внутри моего контроллера - PullRequest
0 голосов
/ 07 ноября 2019

Привет, ребята, новичок в Laravel здесь. Я пытаюсь отредактировать свое сообщение, и когда я пытаюсь получить доступ к функции edit в моем контроллере, я получаю это error Property [id] does not exist on this collection instance.

Это мой код маршрута

Route::resource('/article','PostController'); 

Это мой контроллер

public function edit(Post $post)
{

    $post = Post::all();
    return view('article.edit',compact('post'));

}

Это мой код просмотра

<a href="{{route('article.edit', $post->id)}}" class="btn btn-info btn-sm btn-bordred wave-light"> 
<i class="fas fa-edit"></i></a>

И решение? Заранее спасибо

Ответы [ 4 ]

1 голос
/ 07 ноября 2019

Когда вы используете «все», вы получите все данные из почтовой таблицы. В функции редактирования вы получаете $ id в качестве параметра.

public function edit($id)
{

    $post = Post::find($id);
    return view('article.edit',compact('post'));

}
1 голос
/ 07 ноября 2019

вы передаете collection вашему view вместо одного сообщения

public function edit(Post $post)
{

    $post = Post::all(); // this is a collection of posts
    return view('article.edit',compact('post'));

}

оно должно быть:

public function edit(Post $post)
{
    // here $post holds the instance of single/current post

    return view('article.edit',compact('post'));

}

Тогда в вашем blade

<a href="{{route('article.edit', ['post' => $post->id ])}}" class="btn btn-info btn-sm btn-bordred wave-light"> 
<i class="fas fa-edit"></i></a>

Примечание: Поскольку вы передаете $post как instance модели, поэтому вам не нужно использовать Post::find(); laravel, которая автоматически позаботится об этомКонец

Спасибо

0 голосов
/ 07 ноября 2019

Post::all() вернуть коллекцию (несколько моделей)

Вам нужно передать идентификатор в edit($id) function, и тогда вы сможете find($id)

 public function edit($id){
      $post = Post::find($id);
      return view('article.edit')->with('post', $post);
 }
0 голосов
/ 07 ноября 2019

Это потому, что переменная $post содержит коллекцию Laravel. Вы должны выполнить итерацию по этой коллекции, чтобы получить доступ к каждой модели поста.

// Returns a collection of posts model (think of 
// it as an array of posts)
$post = Post::all();

На своем блейде используйте foreach для перебора каждого поста.

Редактировать

Я вижу, что у вас уже есть доступный экземпляр сообщения, в этом случае просто используйте этот код

public function edit(Post $post)
{
    return view('article.edit', ["post" =>$post]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...