我需要帮助来访问我的数据透视表中的外部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>
答案 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()
方法。