Yev*_*Yev 13 php laravel eloquent blade laravel-4
我有3张桌子:
门
颜色
door_colors
和2个具有多对多关系的模型(每扇门有多种颜色,许多颜色与门到门重叠):
门模型
class Door extends Eloquent {
public function colors()
{
return $this->belongsToMany('Color', 'door_colors');
}
}
Run Code Online (Sandbox Code Playgroud)
颜色模型
class Color extends Eloquent {
public function doors()
{
return $this->belongsToMany('Door', 'door_colors');
}
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个表单,我可以编辑门,并通过复选框更新可用的颜色.这是我的管理员门控制器
class AdminDoorsController extends AdminController {
public function edit($id)
{
$data['door'] = Door::find($id);
$data['colors'] = Color::all();
return View::make('admin/doors/form', $data);
}
}
Run Code Online (Sandbox Code Playgroud)
和管理员窗体视图
{{ Form::model($door) }}
Colors:
@foreach ($colors as $color)
{{ Form::checkbox('colors[]', $color->id) }} {{ $color->name }}
@endforeach
{{ Form::close() }}
Run Code Online (Sandbox Code Playgroud)
问题1:如何进行设置,以便在输出复选框时,检查与当前门存在关系的复选框,并取消选中未关联的复选框.
问题2:一旦我勾选方框并点击提交,我将如何更新关系?$door->colors()->detach();
清除这扇门的所有现有门,然后$door->colors()->attach($color_id_array);
根据一系列颜色ID创建新门?
任何输入都表示赞赏!
use*_*496 20
问题1:您应该将其传递到包含表单的视图中,尽管它也可以在视图中正确显示,尽管这不是最佳实践.做类似的事......
$checkeds = Door::find(1)->colors()->lists('id');
Run Code Online (Sandbox Code Playgroud)
...你发现的门是正在更新的门.然后在循环中输出复选框之前,添加
$checked = in_array($color->id, $checkeds) ? true : false;
Run Code Online (Sandbox Code Playgroud)
然后你会改变
{{ Form::checkbox('colors[]', $color->id) }}
{{ $color->name }}`
Run Code Online (Sandbox Code Playgroud)
至
{{ Form::checkbox('colors[]', $color->id, $checked) }}
{{ $color->name }}
Run Code Online (Sandbox Code Playgroud)
问题2:实际上有一个完美的方法给你.使用
$door->colors()->sync(Input::get('colors'));
Run Code Online (Sandbox Code Playgroud)
它将删除旧的并一次性添加所有新的.
归档时间: |
|
查看次数: |
7514 次 |
最近记录: |