在 Laravel 8 中进行搜索后,如何在我的 "empleados" 数据表中显示相关表的名称?

How do I show the name of the related tables in my "empleados" datatable after doing a search in Laravel 8?

对不起我的语法,英语不是我的母语。

我的数据 table 在不进行任何搜索时工作正常。但是,当我使用字段 nombre 进行搜索时,出现了这个错误:

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

这是我在table上方的“高级搜索”:

<form action="#" method="GET">
            <h3>Busqueda Avanzada</h3><br>
            <div class="row">
                    <div class="row g-2">
                        <div class="col-md">
                            <div class="form-floating">
                                <input type="nombre" class="form-control" id="nombre" name="nombre" placeholder="" value="">
                                <label for="nombre">Nombre</label>
                            </div>
                        </div>
                    </div>
            </div><br>
            <input type="submit" value="Search" class="btn btn-secondary">
</form>

这是我使用 foreach 的代码部分。当我不使用“高级搜索”时,这部分工作正常 (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 class="btn btn-info" href="/empleado/{{$empleado->id}}/edit">Editar</a>
                    <button class="btn btn-danger">Borrar</button>
                </td>
            </tr>
        @endforeach

这是我的索引方法,我确认是否有任何更改查询的请求 (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
            ]);
    }

所以当我进行搜索时,出现了上述错误。我在 Empleado.php 模型中得到了我所有的关系。

我也想问一下,这样的做法对吗?

提前致谢,祝您今天愉快。

首先,您是否确定了生成此错误的代码行Undefined property: stdClass::$departamento

其次,建议在控制器中使用紧凑而不是数组,就像那样

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'));
    }

如果您的模型有问题,您需要在此处分享以查看您的关系

departamentocargonomina 关系添加预加载并使用基于模型的查询,使用 DB 将无法访问您的关系。

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]);
}