AnswerBun.com

Laravel 5.7 "Class name must be a valid object or a string"

Stack Overflow en español Asked by Mhizer on January 4, 2022

Estoy realizando un crud, y al llegar a la parte de la modificacion tengo el siguiente problema,
anteriormente ya habia realizado otros proyectos y en esta parte todo funcionaba bien, el problema sale porque las id´s de las tablas siempre eran simples, pero en este caso las id´s son distintas ejemplo

id_tipoproducto

A la hora de usar el metodo Find() se enfoca solo en la llave primaria (id) y este metodo no me funciona, asi que busque otro porque tambien lo uso para el metodo de eliminar y es el siguiente

    $tipo_producto->tipo_producto::whereRaw('id_tipoproducto = id_tipoproducto', [$id_tipoproducto])->get();

el problema esta en que a la hora de dar submit al formulario me regresa el siguiente error:

"Class name must be a valid object or a string"

les muestro el codigo que estoy usando para modificar mi registro.

public function update(Request $request, tipo_producto $tipo_producto)
{
$id_tipoproducto = $request->id_tipoproducto;
$tipo_producto->tipo_producto::whereRaw('id_tipoproducto = id_tipoproducto', [$id_tipoproducto])->get();
//$tipo_producto= tipo_producto::find($id_tipoproduto);
$tipo_producto->tipo = $request ['tipo'];
$tipo_producto->update();
return redirect('tipop'); 
}

Anexo la estructura de mi modelo y de mi tabla

  <?php

namespace App;

use IlluminateDatabaseEloquentModel;

class tipo_producto extends Model
{
    protected $table="tipo_producto";
    protected $fillable=['id_tipoproducto','tipo'];
}

Tabla con la que estoy trabajando

y aqui el error que me salta si intento usar el metodo find()
Error al usar Find

One Answer

Atendamos algunas observaciones:

  • No estás declarando la propiedad necesaria para decirle a Eloquent que tu llave primaria tiene un nombre distinto al esperado, entonces va así:

    protected $primaryKey = 'id_tipoprpoducto';
    
  • Además de lo anterior, estas filtrando por la llave primaria por lo tanto se me hace innecesario (no es que esté mal) inyectes al modelo y un objeto (pues al hacer esto considero que sería mas útil por ejemplo si estuvieras trabajando con route model binding)

Entonces nuestra actualización pudiera quedar así:

public function update(Request $request, $id)
{
    $elementoAModificar = tipo_producto::findOrFail($id);
    $elementoAModificar->tipo = $request->tipo;
    $elementoAModificar->save();
}

Lo que hacemos es:

  • Filtrar del modelo tipo_producto
  • Indicar que a la propiedad tipo le asignamos el valor de tipo que nos llega por el request
  • Guadar los cambios hechos

Answered by BetaM on January 4, 2022

Add your own answers!

Related Questions

Error al iniciar servicio SQL Server

0  Asked on January 24, 2021 by jorge-galibert

     

Montar proyecto laravel 5.7 en hosting

1  Asked on January 24, 2021 by isc-ramirez

 

Solicitud Api google maps – javascript php

0  Asked on January 23, 2021 by esteban-baquero

       

Como evaluar si un audio se esta reproduciendo

1  Asked on January 23, 2021 by pancho-bolatti

       

Obtener nombre de una imagen cargada en PHP (Codeigniter)

1  Asked on January 22, 2021 by juan-luis

     

Obtener nombre de mes en Español (Laravel, Carbon)

6  Asked on January 22, 2021 by c47

   

Inyección de dependencias con listas?

0  Asked on January 22, 2021 by kenneth-steve-aguilar

       

Error al comunicar Sentry con Laravel 8

0  Asked on January 21, 2021 by dany-villarroel

   

¿como decifrar la cadena de conexion en el config?

1  Asked on January 21, 2021 by jose-leonardo-quiones

     

Conectar Angular 10 con una api en contenedores docker

0  Asked on January 20, 2021 by jodurpar

     

La conexión java con mysql no funciona

1  Asked on January 20, 2021 by carlos-aburto

     

Editar/Eliminar datos Firebase sobre un RecyclerView

1  Asked on January 19, 2021 by cristian-prieto-beltran

   

Ask a Question

Get help from others!

© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP, SolveDir