php - 在laravel 5.4中以一种多对多关系的形式添加具有多个表的数据
问题描述
我正在尝试插入两个具有多对多关系的表:分配和收集器。我还在它们之间创建了一个名为 assignment_collector 的中间表或数据透视表。
分配文件夹中的 create.blade.php
<form method="POST" action="{{ route('assignments.store') }}">
{{ csrf_field() }}
<div class="form-group">
<label for="area_id">Area: </label>
<select class="form-control" name="area_id">
@foreach ($areas as $area)
<option value= "{{ $area->id }}">
{{ $area->campus }} {{ $area->building }} {{ $area->floor }}
</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for="mts_id">MTS: </label>
<select class="form-control" name="mts_id">
@foreach ($mts as $mt)
<option value= "{{ $mt->id }}">
{{ $mt->location }}
</option>
@endforeach
</select>
</div>
<div class="form-group">
<input type="hidden" class="form-control" id="status" name= "status" value="Active">
</div>
<div class="form-group">
<label for="collector_id">Collector: </label>
<select class="form-control" name="collector_id">
@foreach ($assignments as $assignment)
@foreach($assignment->collectors as $collector)
<option value= "{{ $collector->id }}">
{{ $collector->firstname }} {{ $collector->lastname }}
</option>
@endforeach
@endforeach
</select>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Add</button>
</div>
</form>
分配控制器
public function store(Request $request)
{
$this->validate($request, [
'area_id' => 'required',
'mts_id' => 'required',
'status' => 'required',
'collector_id' => 'required'
]);
$assignment = new Assignment();
$assignment->area_id = $request->area_id;
$assignment->mts_id = $request->mts_id;
$assignment->status = $request->status;
$assignment->save();
$assignment_collector = new AssignmentCollector();
$assignment_collector->collector_id = $request->collector_id;
$assignment_collector->assignment_id = $assignment->id;
$assignment_collector->save();
return redirect('/assignments');
}
分配模型
public function collectors()
{
return $this->belongsToMany(Collector::class);
}
收集器模型
public function assignments()
{
return $this->belongsToMany(Assignment::class);
}
我收到了一个错误:App\AssignmentCollector 因为没有AssignmentCollector,而且当我阅读教程时,您不需要为数据透视表制作模型。我阅读了其他文章,但我更加困惑。请帮助我,因为我还是 Laravel 的新手,我很困惑。谢谢!
解决方案
您的作业收集器表不需要模型。你想要做的是创建分配然后分配
$assignment->collectors()->create([
// all the collector data
]);
推荐阅读
- python-3.x - Python - 线程占用过多的 CPU
- keras - 在给定非文本序列数据的情况下,用于多类分类的 LSTM 的 y-train 的形状应该是什么?
- python - 如何根据列表给出的键获取嵌套字典中的值?
- c - SIMD - AVX - 使用非零值而不是最高位进行掩码
- c++ - 在解压可变参数模板直到运行时条件时避免“递归”函数调用
- android - 将测试应用程序 ID 与 adMob 一起使用时出现无效应用程序 ID 错误
- css - 为什么这个 CSS 代码在我的内盒中溢出,即使它适合我的外盒?
- node.js - 从 mongodb 的嵌套文档数组中删除一条记录
- python - odoo 10 打印 XLSX 报告时访问被拒绝
- python - 使用 PyArrow 时如何捕获 Python UDF 异常