首页 > 解决方案 > 在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 的新手,我很困惑。谢谢!

标签: phplaravellaravel-5.4

解决方案


您的作业收集器表不需要模型。你想要做的是创建分配然后分配

$assignment->collectors()->create([
  // all the collector data
]);

推荐阅读