如何在Laravel 5.6中使用Form :: Select和数据透视表

时间:2018-06-23 16:42:14

标签: laravel forms select pivot-table

我尝试在Laravel 5.6中使用Form :: select,但是当我进入“编辑页面”时,在select中,有一些选项包含对象Model的所有数据,而不是常规字段。

我有一个与ManyToMany有标签模型的关系的游戏模型。

在游戏控制器的编辑功能中

public function edit($item)
{        
    $tags  = Tag::all();
    return view('megadmin.games.edit', compact('item', 'tags'));
}

在我的表单刀片中:

 {!! Form::select('tags', $tags, array_pluck($tags, 'id_tag','name'), ['class' => 'form-control'])!!}

结果如下:

The result

我只想要带有数据的常规选择/选项,我想在游戏表格中检索与游戏相关的模型标签。

感谢您的帮助^^

2 个答案:

答案 0 :(得分:0)

控制器

public function edit($item)
{        
    $tags  = Tag::all();
    $goodTag = $item->tags()->first()->id; 
     //here assuming `$item` is your Game object and 
    //you have ManyToMany relation with tags with `tags` function in game model 
   //lots of assuming

    return view('megadmin.games.edit', compact('item', 'tags', 'goodTag));
}

查看

 {!! Form::select('tags', array_pluck($tags,'name', 'id_tag'), $goodTag, ['class' => 'form-control'])!!}

这是Laravel形式选择源代码https://www.luckyryan.com/2013/08/25/testing-spring-mvc-controllers/

array_pluck https://github.com/illuminate/html/blob/master/FormBuilder.php#L393

答案 1 :(得分:0)

我假设您正在使用表单模型绑定,因此可以执行以下操作:

在您的游戏模型中,仅为您创建一个新方法,用于表单模型绑定:

class Game extends Model
{
  use FormAccessible;

  public function tags()
  {
     return $this->belongsToMany(Tag::class);
  }

  public function formTagsAttribute()
  {
    return $this->tags()->pluck('id_tag');
  }
}

在您的控制器中:

public function edit($item)
{        
    $tags  = Tag::pluck('name', 'id_tag');
    return view('megadmin.games.edit', compact('item', 'tags'));
}

您认为:

{!! Form::model($game, [$attributes]) !!}
    {!! Form::select('tags', $tags, null, ['class' => 'form-control']) !!}
     .
     .
     .
 {!! Form::close() !!}