我需要一些关于Laravel问题的帮助。我有3张桌子:
specie_pellet 表是弹丸组合的轴心,并且有一个名为 percentuale 的额外字段(百分比)。 显然,关系是Specie Class中的belongsToMany和Pellet Class中的belongsToMany 详细说明Pellet Class:
// Imposto la relazione con le Specie
public function specie()
{
return $this->belongsToMany(Specie::class)->withPivot('percentuale');
}
详细的Specie Class:
// Imposto la relazione con i Pellets
public function pellets()
{
return $this->belongsToMany(Pellet::class)->withPivot('percentuale');
}
要修改表格,请使用表格:
{!! Form::model($pellet, ['method' => 'PUT', 'route' => ['composizione.update', $pellet->id]]) !!}
<table class="table table-bordered">
<thead>
<th>Specie</th>
<th>Percentuale</th>
<th>Azione</th>
</thead>
<tbody>
@foreach($pellet->specie as $specie)
<tr>
<td>{!! Form::select('specie[]', $listaSpecie, $specie->id, ['class' => 'form-control']) !!}</td>
<td>
<input type="text" class="form-control" name="percentuale[]" value="{{ $specie->pivot->percentuale }}">
</td>
<td><a class="btn btn-danger" href="{{ url('composizione/pellet/elimina/id/' . $pellet->id . '/specie/' . $specie->id) }}">Elimina</a> </td>
</tr>
@endforeach
</tbody>
</table>
{!! Form::submit('Aggiorna Composizione', ['class' => 'btn btn-success']) !!}
{!! Form::close() !!}
请求传递给路径
Route::put('composizione/pellet/update/{id}', 'PelletController@updateComposizione')->name('composizione.update');
最后我有控制器
public function updateComposizione(\App\Http\Requests\ComposizioneUpdateRequest $request, $id)
{
$pellet = Pellet::find($id);
$specie = Input::get('specie');
$percentuali = Input::get('percentuale');
$pellet->specie()->sync([$specie => ['percentuale' => $percentuali]]);
return redirect('admin/pellets/')->with('ok_success', 'Composizione aggiornata correttamente');
}
但我收到此错误:非法偏移类型
in PelletController.php line 94
at HandleExceptions->handleError(2, 'Illegal offset type', '/srv/users/serverpilot/apps/laraweb/app/Http/Controllers/PelletController.php', 94, array('request' => object(ComposizioneUpdateRequest), 'id' => '5', 'pellet' => object(Pellet), 'specie' => array('1', '7'), 'percentuali' => array('50', '50'))) in PelletController.php line 94
at PelletController->updateComposizione(object(ComposizioneUpdateRequest), '5')
at call_user_func_array(array(object(PelletController), 'updateComposizione'), array(object(ComposizioneUpdateRequest), 'id' => '5')) in Controller.php line 55
...
有人可以帮我理解这个吗? 非常感谢,对不起我的英语。我是意大利人;)
答案 0 :(得分:0)
我建议你查看关于表单的laravel教程并重新考虑这种方法,即select可能不是最好的方法。选择不是解决这个问题的最佳方法。
尝试这样做:
@foreach($pellet->specie as $specie)
{!! Form::open(["url" => "composizione/pellet/update/".$pellet->id, "method" => "PUT"]) !!}
<tr>
<td>
<input type="hidden" name="specie" value={{$specie->id}} />
<input type="text" class="form-control" name="percentuale" value="{{ $specie->pivot->percentuale }}">
</td>
<td><inpyt type="submit" class="btn btn-danger">Elimina</a> </td>
</tr>
{!! Form::close() !}}
@endforeach
剩下的可能会奏效。这里发生的是您一次更新单个specie / percentuale
组合,而不是多个组合。