首页 > 解决方案 > Laravel:从不同的表中选择选项

问题描述

过去几天我在学习 laravel,我想知道是否可以对从特定表中获取记录的选择标签进行 foreach

所以在我的控制器中我有这个,基本上它是一个验证,如果它存在则返回记录

public function create(Request $request)
    {
        //
        $cpf = $request->input('cpf');

        $cooperado = \DB::table('cooperados')   // query builder, busca o registro de acordo com cpf
            ->select('id', 'nome', 'cpf')
            ->where('cpf', '=', $cpf)
            ->first();

        //$cooperado = Cooperados::find($id);
        //return view('cadastro.create', compact('cooperado'));

        if(count($cooperado) == 0){

            return redirect('validar')->with('success', 'CPF incorreto ou não registrado');
            //return view('cadastro.create', compact('cooperado'));

        } else {

            //return redirect('validar')->with('success', 'CPF incorreto ou não registrado');
            return view('cadastro.create', compact('cooperado'));

        }

    }

这就是我的创建视图的样子

<form action="{{ route('cadastro.store') }}" method="POST">
                    @csrf
                    <div class="row">
                        <div class="col">
                        <label for="cooperado">Cooperado</label>
                        <input type="text" class="form-control" value="{{ $cooperado->nome }}" readonly>
                        </div>
                        <div class="col">
                        <label for="cpf">CPF</label>
                        <input type="text" class="form-control" value="{{ $cooperado->cpf }}" readonly>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="dependente">Dependente</label>
                        <input type="text" class="form-control" id="dependente" placeholder="Nome do estudante">
                    </div>
                    <div class="form-group">
                        <label for="extracurricular">Extracurricular</label>
                        <select class="form-control" id="extracurricular">
                        <option>Futsal</option>
                        <option>Volei</option>
                        <option>Futebol</option>
                        <option>Internet</option>
                        <option>Radio</option>
                        </select>
                    </div>
                    <div class="form-group">
                        <label for="dependente">Série</label>
                        <input type="text" class="form-control" id="dependente" placeholder="Exemplo: 3 Serie D">
                    </div>
                    <div class="form-group">
                        <button type="submit" class="btn btn-success">
                                Cadastrar
                        </button>
                    </div>
                    </form>

如您所见,我的表单上有一个选择标签,我想使用 foreach 从不​​同的表中选择记录,我知道在我的视图中进行查询并不酷,那么我该怎么做呢?(这个表格就像学生注册,选择标签是学生选择课程的地方)

标签: phplaravel

解决方案


这很常见,你是对的;不要将查询逻辑添加到您的视图中。由于控制器正在返回该视图,因此在控制器中执行查询并将其传递给视图。假设您有一个courses包含“Futsal”、“Volei”等记录的表格。像这样调整您的控制器:

$cpf = $request->input('cpf');

$cooperado = \DB::table('cooperados')
->select('id', 'nome', 'cpf')
->where('cpf', '=', $cpf)
->first();

$courses = Course::orderBy('name')->get();
// Note: use DB::table('courses') if you don't have a `Course` model, but models are preferred

return view('cadastro.create', compact('cooperado', 'courses'));

然后,在您看来,使用 aforeach超过 的值$courses

<select class="form-control" id="extracurricular" name="course">
  @foreach($courses AS $course)
  <option value="{{ $course->id }}">{{ $course->name }}</option>
  @endforeach
</select>

如果正确完成,您应该在匹配数据库中的课程中包含多个<option>元素。<select>

注意:添加name="course"到您的<select>, 值可以在POST通过 处理请求的控制器中检索$request->input("course"),并且将是id所选课程的值。


推荐阅读