簡體   English   中英

使用Laravel表單模型綁定和復選框更新多對多的Eloquent關系

[英]Many-to-Many Eloquent relationship update with Laravel Form Model Binding & Checkboxes

我有3張桌子:

  • ID
  • 名稱
  • 圖片

顏色

  • ID
  • 名稱
  • 圖片

door_colors

  • ID
  • door_id
  • COLOR_ID

和2個具有多對多關系的模型(每扇門有多種顏色,許多顏色與門到門重疊):

門模型

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->colors()->detach(); 要清除此門的所有現有門,然后$door->colors()->attach($color_id_array); 基於一系列顏色ID創建新的?

任何輸入都表示贊賞!

問題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'));

它將刪除舊的並一次性添加所有新的。

假設您正在為用戶和角色建模,並希望編輯具有角色的用戶。

在您的控制器編輯中,

$user = User::find($id);
$roles = Role::lists('name', 'id'); // to populate all roles

在您的模板中,如果您使用select,

{{ Form::select('roles[]', $roles, array_pluck($user->roles, 'id'), ['multiple']) }}

在您的控制器更新中,

$inputs = Input::all();
$roles = $inputs['roles'];
$user->roles()->sync($roles);

// $user->fill($inputs);
// $user->save();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM