如何在数据透视表上插入多个值?

时间:2019-04-04 00:48:24

标签: laravel insert many-to-many pivot-table

我正在尝试在数据透视表中插入多个值。

这些表是参与者和事件(参与者和事件)。

我的想法是创建一个列表,该列表打印不在数据透视表列表中的值,然后选中要插入的所有值。然后将所有值传递给Controller并将其插入。

这是我的Evento模型:

class Evento extends Model
{
    protected $primaryKey = 'id_evento';
    public function participantes(){
        return $this->belongsToMany('App\Participante', 'evento_participante', 'id_evento', 'id_participante' );  
    }
}

这是我的参与者模型:

class Participante extends Model
{
    protected $primaryKey = 'id_participante';

    public function eventos(){
        return $this->belongsToMany('App\Evento', 'evento_participante', 'id_participante', 'id_evento');
    }

这是模态,列表在哪里。在(Evento)show.blade模板上:


<div class="modal fade bd-example-modal-lg" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  <div class="modal-dialog modal-lg" role="document">
    <div class="modal-content modal-lg">
      <div class="modal-header " >
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title" id="myModalLabel">Nuevo Evento</h4>
      </div>

      <form action="{{ route('evento.update', ['evento' => $evento->id_evento]) }}" method="POST">
           @csrf
        <input type="hidden" name="_method" value="PUT"/>

             <table id="table_id2" class="table table-hover table-bordered display">
        <thead>
            <!--<th style="width: 10px;"><button type="button" class="btn btn-default btn-sm checkbox-toggle"><i class="fa fa-square-o"></i></button></th>-->


                <th>Nombre</th>
                <th>Apellidos</th>
                <th>Sexo</th>
                <th>Categoría</th>
                <th>Edad</th>
                <th>Club</th>
                <th>Cinturón</th>
                <th></th>

        </thead>

            <tbody>
            @foreach ($participantes as $participante)
                        @if (Auth::user()->hasRole('Administrador'))

        <tr>


        <td >{{$participante->nombre}}</td>
        <td>{{$participante->apellidos}}</td>
        <td>{{$participante->sexo}}</td>
        <td>{{$participante->categoria->nombre}}</td>
        <td>{{\Carbon\Carbon::parse($participante->fecha_nacimiento)->age}}</td>
        <td>{{$participante->club->nombre}}</td>
        <td>{{$participante->cinturon}}</td>
        <td><input type="checkbox" name="insertar"/></td>
        </tr>

        @endif
        @endforeach
        <tfoot>
            <tr>

                <th>Nombre</th>
                <th>Apellidos</th>
                <th>Sexo</th>
                <th>Categoría</th>
                <th>Edad</th>
                <th>Club</th>
                <th>Cinturón</th>
            </tr>
        </tfoot>
            </tbody>
      </table>




      <div class="modal-footer">

        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="submit" class="btn btn-primary">Guardar</button>
      </div>
      </form>
    </div>
  </div>
</div>

这是我的EventoController:

    public function show($id_evento)
    {

        $evento = Evento::find($id_evento);
        //$participantes = Participante::all();
        $participantes = Participante::get();


        return view('evento.show', ['evento' => $evento], ['participantes' => $participantes]);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Evento  $evento
     * @return \Illuminate\Http\Response
     */
    public function edit(Evento $evento)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Evento  $evento
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Evento $evento)
    {
        $evento->update($request->all());
        //$evento=save();
        if($request->has('test')){
        $evento->participantes()->sync([$request->input('id_participante')]);


        }

这将返回白屏。 URL是/ evento / {id}(在这种情况下为1)。

谢谢, 对不起,我的英语。

1 个答案:

答案 0 :(得分:0)

您可以使用sync()方法将多个记录存储到数据透视表中,该方法接受带有值的数组。

以您的模型为例,您可以这样做:

$evento->participantes()->sync([1,2,3,4]);

这会将participantes附加到您的evento上;

在这里您可以找到有关https://laravel.com/docs/5.8/eloquent-relationships#updating-many-to-many-relationships

的更多信息