Home > Blockchain >  How do I show the name of the related tables in my "empleados" datatable after doing a sea
How do I show the name of the related tables in my "empleados" datatable after doing a sea

Time:03-16

Sorry for my grammar, english is not my native language.

My data table is working fine when is not doing any search. But, when I do a search with the field nombre is giving me this error:

Undefined property: stdClass::$departamento (View: /Users/xxx/Sites/contablerd/resources/views/rrhh/empleado/index.blade.php)

This is my "Advanced Search" above the table:

<form action="#" method="GET">
            <h3>Busqueda Avanzada</h3><br>
            <div >
                    <div >
                        <div >
                            <div >
                                <input type="nombre"  id="nombre" name="nombre" placeholder="" value="">
                                <label for="nombre">Nombre</label>
                            </div>
                        </div>
                    </div>
            </div><br>
            <input type="submit" value="Search" >
</form>

This is the part of the code where I am using a foreach. This part work fine when I am not using the "Advanced Search" (rrhh/empleado/index.blade.php):

@foreach($empleados as $empleado)
            <tr>
                <td>{{$empleado->id}}</td>
                <td>{{$empleado->nombre}}</td>
                <td>{{$empleado->apellido}}</td>
                <td>{{$empleado->departamento->det}}</td>
                <td>{{$empleado->cargo->det}}</td>
                <td>{{$empleado->nomina->det}}</td>
                <td>{{number_format($empleado->sueldo,2)}}</td>
                <td>{{number_format($empleado->ars_empleado $empleado->afp_empleado,2)}}</td>
                <td>{{number_format($empleado->sueldo-($empleado->ars_empleado-$empleado->afp_empleado),2)}}</td>
                <td>
                    <a  href="/empleado/{{$empleado->id}}/edit">Editar</a>
                    <button >Borrar</button>
                </td>
            </tr>
        @endforeach

This is my index method where I confirm is there is any request to change the query (EmpleadoController.php):

public function index(Request $request)
    {
        $empleados = \DB::table('empleados');

        if($request->input('nombre')){
            $empleados = $empleados->where('nombre', 'LIKE', "%".request('nombre')."%");
            $empleados = $empleados->get();
        }else{
            $empleados = Empleado::all();
        }
        return view('rrhh.empleado.index',
            [
                'empleados'=>$empleados
            ]);
    }

So when I do a search is giving me the above error. I got all my relationships in Empleado.php model.

I would like to ask too, is this the correct way to do this?

Thanks in advance and happy rest of the day.

CodePudding user response:

Added eager loading for departamento, cargo and nomina relations and used the query based on the model, using DB will not access your relations.

public function index(Request $request)
{
    if($request->has('nombre')) {
        $empleados = Empleado::with(['departamento', 'cargo', 'nomina'])->where('nombre', 'LIKE', '%' . $request->get('nombre') . '%')->get();
    } else {
        $empleados = Empleado::all();
    }

    return view('rrhh.empleado.index', ['empleados' => $empleados]);
}

CodePudding user response:

First, Did you identify the code line where this error was generated Undefined property: stdClass::$departamento ?

Second, it's recommended use compact instead array in the controller, like that

public function index(Request $request)
    {
        $empleados = \DB::table('empleados');

        if($request->input('nombre')){
            $empleados = $empleados->where('nombre', 'LIKE', "%".request('nombre')."%");
            $empleados = $empleados->get();
        }else{
            $empleados = Empleado::all();
        }
        return view('rrhh.empleado.index',compact('empleados'));
    }

If there are something wrong in your model, you need share it here to can see how you have the relationships

  • Related