从数据透视表中获取ID以在Laravel中的表单生成器中使用

时间:2018-07-19 14:50:55

标签: php laravel formbuilder

我需要帮助来访问我的数据透视表中的外部ID,以在表单构建器选择表单中使用。我尝试在插入影片并选择类别时创建一个表单,然后在通过从数据透视表中获取category_id插入影片时将它们连接起来。

我使用多对多关系,我的表是电影和带有数据透视表category_movie(id,category_id,movie_id)的类别。

这是我的控制者和表格。

控制器

    public function store(Request $request)

    {

       $request->user()->authorizeRoles('admin');   

       Movie::create($request->all());

       $categories = Category::pluck('category_name', 'id')->all();

       return view('movies.upload', compact('movies', 'categories'));

    }

查看

   <div class="col-md-6">
   {{csrf_field()}}
      {!! Form::open(['method'=>'GET', 'action'=> 'MoviesController@store']) !!}
        <div class="form-group">
           {!! Form::label('name', 'Name:') !!}
           {!! Form::text('name', null, ['class'=>'form-control'])!!}
        </div>
        <div class="form-group">
           {!! Form::label ('', 'Category:') !!}
           {!! Form::select('', [''=>'Choose Categories'] + $categories, null, ['class'=>'form-control']) !!}
        </div>
        <div class="form-group">
           {!! Form::submit('Insert Movie', ['class'=>'btn btn-primary']) !!}
        </div>
      {!! Form::close() !!}
   </div>

1 个答案:

答案 0 :(得分:0)

首先,您不需要csrf_field()调用(Form::open将为您注入一个)。您需要做的就是向控制器添加逻辑以处理选定的类别。给您选择的名称一个名称,并使其类型为multiple(由于您与用户之间存在多对多关系,因此希望用户能够为电影选择多个类别):

<div class="form-group">
    {!! Form::label('categories', 'Category:') !!}
    {!! Form::select('categories', $categories, null, ['class'=>'form-control', 'multiple' => true]) !!}
</div>

然后在控制器中存储新电影时,您可以从请求中读取选定的“类别”并将其附加:

$movie = Movie::create($request->all());
$movie->categories()->attach($request->get('categories'));

另外,store()方法通常通过POST路由进行访问,它将重定向响应返回到一个页面,用户可以在其中查看新创建的电影(或所有电影)。为了显示表单,最好创建一个单独的create()方法,该方法可以通过GET路由访问。并且不要忘记在Request中验证信息-在将任何内容插入数据库之前,您应该使用Laravel的FormRequest或控制器的$this->validate()方法。