Save to two tables with one-to-many Laravel

1

I could not give myself an error:

  

ErrorException in ParameterBag.php line 88: array_key_exists (): The   first argument should be either a string or an integer

My Controller:

public function store(Request $request){

  $diaria = Diaria::create($request->all());

  $diaria->trechos()->createMany($request->get([
  'local_servico',
  'local_pernoite',
  'data_afastamento_inicio',
  'hora_afastamento_inicio',
  'data_afastamento_retorno',
  'hora_afastamento_retorno',
  'adicional_deslocamento',
  'total_acrescimos',
  'ck_valor_total',
  'valor_total',
  'a_s',
  't_s',
  'houve_pernoite',
  'qt_pernoite'
]));

Session::flash('mensagem_create', 'Ordem de serviço para o Sr. ' .$request->pnome. ' foi adicionada com sucesso!');

return redirect()->route('ficha.index');

}

More details of the error:

  

at HandleExceptions-> handleError ('2', 'array_key_exists (): The first   argument should be either a string or an integer ',   '/var/www/html/diarias/vendor/symfony/http-foundation/ParameterBag.php',   '88', array ('key' => array ('local_servico', 'local_pernoite',   'start_date_date_time', 'start_date_time',   'backfill_data', 'backfill_time',   'additional_location', 'total_acrescimos', 'ck_valor_total',   'total_value', 'a_s', 't_s', 'ago_pernoite', 'qt_pernoite'),   'default' = > object (Request)))

A select (An example of how the inputs are)

{!! Form::select('local_servico[0]', ['placeholder'=>'LOCAL DE REALIZAÇÃO DO SERVIÇO (Cidade):', 'val_br_am_rj'=>'Brasília, Manaus ou Rio de Janeiro', 'val_bh_fl_pa_rc_sl_sp'=> 'Belo Horizonte, Fortaleza, Porto Alegre, Recife, Salvador ou São Paulo', 'val_capitais'=>'Outra capital de Estado', 'val_cidades'=>'Outra Cidade'], null, ['class' => 'form-control input-sm', 'title'=>'LOCAL DE REALIZAÇÃO DO SERVIÇO (Cidade)', 'id'=>'local_servico[0]']) !!}

The others are being created with JS:

{!! Form::select('local_servico[1]',..........

Any ideas?

Edited - Command Return

dd($request->all());

"ne" => ""
  "em_proveito" => "UNIÃO"
  "custeio" => "SEM CUSTO"
  "tr" => array:2 [▼
    0 => array:14 [▼
      "local_servico" => "val_br_am_rj"
      "houve_pernoite" => "s"
      "qt_pernoite" => "4"
      "local_pernoite" => "cg"
      "data_afastamento_inicio" => "01/06/2017"
      "hora_afastamento_inicio" => "08:00"
      "data_afastamento_retorno" => "01/06/2017"
      "hora_afastamento_retorno" => "08:00"
      "adicional_deslocamento" => "SIM"
      "total_acrescimos" => "DIÁRIA COMPLETA"
      "valor_total" => "0"
      "ck_valor_total" => "Sem Custo"
      "t_s" => "0"
      "a_s" => "0"
    ]
    1 => array:14 [▼
      "local_servico" => "val_bh_fl_pa_rc_sl_sp"
      "houve_pernoite" => "s"
      "qt_pernoite" => "3"
      "local_pernoite" => "7"
      "data_afastamento_inicio" => "15/06/2017"
      "hora_afastamento_inicio" => "10:00"
      "data_afastamento_retorno" => "18/06/2017"
      "hora_afastamento_retorno" => "10:00"
      "adicional_deslocamento" => "NÃO"
      "total_acrescimos" => "1/2 DIÁRIA"
      "valor_total" => "4"
      "ck_valor_total" => "Sem Custo"
      "t_s" => "3"
      "a_s" => "2"
    ]
  ]
  "fim_semana" => "dgh"
  "conveniencia_servico" => "fghj"
  "justificativa" => "fgh"
    mais campos.....

In my controller I tried to save it as well

$diaria = Diaria::create($request->all());
 $trInput = $request->get('tr');

$tr = array();
foreach($trInput as $tr)
{
  $tr[] = new Trecho($tr);
}

$diaria->trechos()->saveMany($tr);

Example of my form:

<div id="camposAdd">
<div class="row">
    <div title="Informe a cidade de realização do serviço" class="col-md-4">
      <div class="input-group">
        <span class="input-group-addon" id="basic-addon1">19</span>
        {!! Form::select('tr[0][local_servico]', ['placeholder'=>'LOCAL DE REALIZAÇÃO DO SERVIÇO (Cidade):', 'val_br_am_rj'=>'Brasília, Manaus ou Rio de Janeiro', 'val_bh_fl_pa_rc_sl_sp'=> 'Belo Horizonte, Fortaleza, Porto Alegre, Recife, Salvador ou São Paulo', 'val_capitais'=>'Outra capital de Estado', 'val_cidades'=>'Outra Cidade'], null, ['class' => 'form-control input-sm', 'title'=>'LOCAL DE REALIZAÇÃO DO SERVIÇO (Cidade)', 'id'=>'local_servico[0]']) !!}
      </div>
    </div>
    <div class="col-md-2">
      {!! Form::input('checkbox', 'tr[0][houve_pernoite]', $value = "s", $attributes = ['id'=>'hp[0]']) !!}&nbsp&nbsp&nbspHouve Pernoite?
    </div>
    <div class="col-sm-2">
      {!! Form::text('tr[0][qt_pernoite]', null, array('id'=>'qt_pernoite[0]','class' =>'form-control input-sm', 'placeholder'=>'QNT DE PERNOITES:')) !!}
    </div>
    <div title="Informe os locais de pernoite" class="col-md-4">
      <div class="input-group">
        <span class="input-group-addon" id="basic-addon1">20</span>
        {!! Form::text('tr[0][local_pernoite]', null, array('class' =>'form-control input-sm', 'placeholder'=>'LOCAL(IS) DE PERNOITE:')) !!}
      </div>
    </div>

EDITION: I'm trying like this, but it does not work out

    public function edit($id){

 if(!($diaria = Diaria::find($id))) {

    throw new ModelNotFoundException("Ordem de serviço não encontrada!");

  }

  $tr = $diaria->trechos;
  foreach ($tr['Trecho']['diaria_id'] as $value) {
      $tr = Trecho::find($id);
  }

return view('ficha.edit', compact('diaria', 'tr'));

}
    
asked by anonymous 02.07.2017 / 20:22

1 answer

0

I believe this already solves:

$diaria = Diaria::create($request->all());
$tr     = $request->all();
foreach($tr['tr'] as $values)
{
  $diaria->trechos()->create($values);
}
    
04.07.2017 / 02:01