Multi-Insert with Laravel 5.3 dynamic form

Asked

Viewed 767 times

1

I am trying to do a multiple Insert with Laravel 5.3 in a table as follows:

Form

{!! Form::open(['route' => 'demanda.store', 'class' => 'form']) !!}
<div class="form-group form-inline">
  {!! Form::label('ano', 'Ano:'); !!}
  {!! Form::text('ano', $ano, ['class'=>'form-control','readonly']); !!}    
</div>
<div class="form-group form-inline">
  @foreach ($unidades as $unidade)
    <div class="form-group">
      {!! Form::hidden('item_id[]', $items->id, null); !!}
      {!! Form::hidden('ano[]', $ano); !!}
      {!! Form::label('unidade', $unidade->sigla); !!}
      {!! Form::hidden('unidade_id[]', $unidade->id, null); !!}
      {!! Form::text('qtd[]', null,['class'=>'form-control','placeholder' =>'Demanda'])!!}
    </div>
  @endforeach
</div>
{!! Form::submit('Salvar', ['class' => 'btn btn-primary']) !!}
{!! Form::close() !!}

What would my controller look like to insert this data into my table, knowing that the fields in my table are:

  • ano
  • tem_id
  • unidade_id
  • qtd

Controller

public function store(DemandaFormRequest $request)
{
    $dataForm = $request->all();
    $insert = $this->demanda->insert($dataForm);
 }

I get the following error:

QueryException in Connection.php line 770: Array to string conversion

  • It is because some fields of your form arrive as an array, you must do a foreach to insert each one

1 answer

1


A array of information to be recorded with , needs to be made a for for each item and records one to one as follows:

public function store(DemandaFormRequest $request)
{
    $dataForm = $request->all();
    for($i = 0; $i<count($dataForm['ano']); $i++)
    {
        // gerando os dados, foi feito isso porque existe um campo 
        // que é diferente no form e na tabela, 
        // se não gravaria o $item direto
        // talvez caiba uma alteração no form (alerta) pois ai o trabalho
        // seria menor
        if (isset($dataForm['qtde']) && !is_null($dataForm['qtde'][$i])) 
        {
            $arrayForm = array(
             'ano' => $dataForm['ano'][$i],
             'tem_id' => $dataForm['item_id'][$i],
             'unidade_id' => $dataForm['unidade_id'][$i], 
             'qtd' => $dataForm['qtde'][$i]
            );
        }
        //imagino que demanda é um instância do Eloquent
        if (count($arrayForm) > 0) 
        {
           $this->demanda->create($arrayForm); // criando novos registros.
        }
    }
}

It is worth remembering that DB has the desired option to record a array of information following this idea:

public function store(DemandaFormRequest $request)
{
    $dataForm = $request->all();
    for($i = 0; $i<count($dataForm['ano']); $i++)
    {
        // gerando os dados, foi feito isso porque existe um campo 
        // que é diferente no form e na tabela, 
        // se não gravaria o $item direto
        // talvez caiba uma alteração no form (alerta) pois ai o trabalho
        // seria menor
        if (isset($dataForm['qtde']) && !is_null($dataForm['qtde'][$i])) 
        {
            $arrayForm[] = array(
             'ano' => $dataForm['ano'][$i],
             'tem_id' => $dataForm['item_id'][$i],
             'unidade_id' => $dataForm['unidade_id'][$i], 
             'qtd' => $dataForm['qtde'][$i]
            );
        }
    }
    if (count($arrayForm) > 0) 
    { 
        \DB::table('demanda')->insert($arrayForm); 
    }
}

References:

  • I get the following error: Illegal string offset 'year' if you remove the year variable, the error jumps to the next.

  • At Handleexceptions->handleError('2', 'Illegal string offset 'year', 'C: wamp64 www siscarp-Laravel app Http Controllers Demandascontroller.php', '91', array('request' => Object(Request), 'dataForm' => array('_token' => 'zDgdJebBqCWXDvkUy0ZXxCR22A2Y5OFKsEdBGDNL', 'year' => array('2017', '2017', '2017', '2017', '2017', '2017', '2017', '2017', '2017', '2017', '2017', '2017', '2017'2017', '2017'2017'), 'item_id' => array('1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1','

  • I made an edition, check it out! @Josécicerorochacavalcante

  • 1

    Worked perfectly.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.