php - 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 从不同的表中选择记录,我知道在我的视图中进行查询并不酷,那么我该怎么做呢?(这个表格就像学生注册,选择标签是学生选择课程的地方)
解决方案
这很常见,你是对的;不要将查询逻辑添加到您的视图中。由于控制器正在返回该视图,因此在控制器中执行查询并将其传递给视图。假设您有一个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
所选课程的值。
推荐阅读
- augmented-reality - Ar-js 和 a-frame 外观控制。如果将外观控件添加到实体,则以角度放置对象
- android - 从后台清除特定片段
- c - 我可以连续重用 pthread_t 和 pthread_attr_t 用于已执行线程的新不同线程吗?
- amazon-web-services - How to improve web-service api throughput?
- python - Python-Selenium - 使用嵌套 For 循环获取用户名和密码列表的蛮力脚本
- javascript - jQuery replaceWith() 回调函数更新内容
- android - C++ Callback to Java -> 为什么我不能在来自不同线程的回调类中检索 JNIEnv?
- pyspark - 列名在 aws 胶水中返回小写
- sql - 如何更新 postgres 中的表以添加订单列?
- corda - 如何在 Corda 中启动流程