我有3张桌子:
门
> id
>名称
>形象
颜色
> id
>名称
>形象
door_colors
> id
> door_id
> color_id
和两个与多对多关系的模型(每个门都有各种颜色,许多颜色重叠在一起):
门型号
class Door extends Eloquent { public function colors() { return $this->belongsToMany('Color','door_colors'); } }
颜色模型
class Color extends Eloquent { public function doors() { return $this->belongsToMany('Door','door_colors'); } }
我想创建一个窗体,我可以编辑门,并通过复选框更新可用的颜色.
这是我的管理员控制器
class AdminDoorsController extends AdminController { public function edit($id) { $data['door'] = Door::find($id); $data['colors'] = Color::all(); return View::make('admin/doors/form',$data); } }
和管理员门窗体视图
{{ Form::model($door) }} Colors: @foreach ($colors as $color) {{ Form::checkBox('colors[]',$color->id) }} {{ $color->name }} @endforeach {{ Form::close() }}
问题1:如何进行复选,如果输入复选框,将检查与当前门有现有关系的那些,而不检查那些.
问题2:一旦我检查框并点击提交,我将如何更新关系? $door->颜色() – >分离();清除所有现有的门,然后$door-> colors() – > attach($color_id_array);根据一系列颜色ids创建新的?
任何输入是赞赏!
问题1:您应该将其传递到包含您的表单的视图中,尽管它也可以在视图中进行,尽管这不是真正的最佳实践.做类似的事情…
$checkeds = Door::find(1)->colors()->lists('id');
$checked = in_array($color->id,$checkeds) ? true : false;
然后你会改变
{{ Form::checkBox('colors[]',$color->id) }} {{ $color->name }}`
至
{{ Form::checkBox('colors[]',$color->id,$checked) }} {{ $color->name }}
问题2:这实际上是一个完美的方法给你.使用
$door->colors()->sync(Input::get('colors'));