Estoy tratando de crear un blog pero sigo recibiendo este error.

La actualización del método BadMethodCallException no existe.

Estoy tratando de editar publicaciones y actualizar la base de datos.

public function update(Request $request, Post $post)
{
    $posts = Post::Find($post);

    $posts->update($request->all());
}
0
Dércio Lichucha 22 ene. 2018 a las 16:17

3 respuestas

La mejor respuesta

Ya está aceptando el objeto Post a través del método

Más bien haciendo algo como esto

public function update(Request $request, Post $post)
{
    $posts = Post::Find($post);

    $posts->update($request->all());
}

Hazlo asi

public function update(Request $request, Post $post)
{  

    // you already have the Post object injected from the framework for you.
    // you can use the instance freely.
    $post->update($request->all());
}

De hecho, puede ser bueno verificar si el objeto $ post es nulo o no, pero laravel arrojará ModelNotFoundException si no tiene coincidencias en la base de datos.

Esto es algo llamado Route Model Binding que laravel 5.5 hace por usted si mantiene la configuración predeterminada, como al usar la clave principal 'id'. puedes leer más sobre esto en este https://laravel.com/docs/5.5/routing#route-model-binding

5
Sithira 22 ene. 2018 a las 15:49

Hacer directamente:

public function update(Request $request, Post $post) {

    $post->update($request->all());

}

$post ya es una instancia del modelo Post si la ruta se declaró como:

Route::get('posts/update/{post}', 'PsotsController@update');

Referencia de documento: enlace del modelo de ruta

4
YouneL 22 ene. 2018 a las 15:30
$posts = Post::find($post->id);

find() solo acepta primary id

1
Sohel0415 22 ene. 2018 a las 13:26