令人困惑的复选框行为

时间:2015-01-29 00:58:53

标签: php laravel methods

我有一个编辑表单,其中包含一些复选框,当我建立关联的多对多关系时,我试图检查这些复选框。

经销商属于许多啤酒 啤酒属于许多经销商

在我的控制器中我有:

        $breweries = Brewery::lists('name', 'id');
        $all_dist = Distributor::all();
        $beer = Beer::find($id);
        $distributions = [];
        foreach ($beer->distributors as $distributor)
            {
                $distributions[$distributor->id] = BeerDistribution::where('beer_id', '=', $beer->id)
                ->where('distributor_id', '=', $distributor->id)->first()->price;
            }

        return View::make('beers.edit', ['beer' => $beer, 'distributors' => $all_dist, 'distributions' => $distributions, 'breweries' => $breweries, 'styles' => $styles]);

我在编辑表格中有:

        {{ Form::model($beer, ['route' => ['beers.update', $beer->id], 'method' => 'PATCH']) }}
            @foreach ($distributors as $distributor)
                <?php $carried = in_array($distributor->id, array_keys($distributions)) ? true : false ?>
                {{ Form::checkbox('distributors[]', $distributor->id, $carried); }}
                {{ Form::label($distributor->name) }}
                {{ Form::label('price' . $distributor->id, 'Retail:') }}
                <?php $price = $carried ? $distributions[$distributor->id] : null ?>
                {{ Form::text('price' . $distributor->id, $price ) }}
            @endforeach
            {{ Form::submit('Save') }}
        {{ Form::close() }}

基本上我传递的是每个distributor_id =&gt;的关联数组。价钱。这个数组还告诉我啤酒已经属于哪些分销商,以便我可以在我的编辑表格中标记这些。

这里的事情变得很糟糕。当我加载此表单时,无论如何都会检查所有复选框。如果我将控制器循环更改为:

foreach ($beer->distributors()->lists('distributor_id') as $distributor_id)

然后我可以创建我的数组。

为什么在控制器中调用$beer->distributors会导致检查所有复选框?

1 个答案:

答案 0 :(得分:0)

问题在于最后一个参数:$carried

{{ Form::checkbox('distributors[]', $distributor->id, [ "checked" => $carried ]); }}

将最后一个参数作为数组传递,并准确告诉它要修改哪个属性和属性值。