如何在Laravel中将枢轴与额外字段同步?

时间:2017-02-26 09:00:49

标签: php laravel

我需要一些关于Laravel问题的帮助。我有3张桌子:

  • 粒料
  • specie(有树)
  • specie_pellet(这是数据透视表)

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
...

有人可以帮我理解这个吗? 非常感谢,对不起我的英语。我是意大利人;)

1 个答案:

答案 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组合,而不是多个组合。