TransWikia.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!

Ask a Question

Get help from others!

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