我有一个编辑表单,其中包含一些复选框,当我建立关联的多对多关系时,我试图检查这些复选框。
经销商属于许多啤酒 啤酒属于许多经销商
在我的控制器中我有:
$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
会导致检查所有复选框?
答案 0 :(得分:0)
问题在于最后一个参数:$carried
{{ Form::checkbox('distributors[]', $distributor->id, [ "checked" => $carried ]); }}
将最后一个参数作为数组传递,并准确告诉它要修改哪个属性和属性值。