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

¿Cómo mostrar los totales por cada grupo de datos?

1  Asked on January 19, 2021 by jonathan-alarcon

   

¿como puedo insertar datos de un xml a mysql con php?

1  Asked on January 19, 2021 by ivanrangel

     

¿Cómo organizar código en funciones?

3  Asked on January 18, 2021 by alfredo-arvelaez

     

Borrar una carpeta cuando se borra un metodo por su id

0  Asked on January 18, 2021 by erick

 

¿Cómo puedo añadir ceros a la izquierda de un entero?

3  Asked on January 18, 2021 by yasiel-hernndez

 

Cómo obtener un tag específico de un xml con python

1  Asked on January 18, 2021 by luis-benito

   

Registro de archivos copiados y eliminados

0  Asked on January 16, 2021 by dhampircu

   

colorear filas basado en una condición

0  Asked on January 16, 2021 by alex-gz

         

Items de menú recorridos en Array!

0  Asked on January 15, 2021

 

Diagramas de codo en la misma grafica con ggplot2

0  Asked on January 15, 2021 by david-torres-v

   

no puedo mostrar los datos en react datatable

0  Asked on January 15, 2021 by dante-turcutto

   

Scroll horizontal en menú de navegacion

1  Asked on January 14, 2021 by agustin-g

     

Ask a Question

Get help from others!

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