从 pivot table 中获取一个 id 以在 laravel 中的表单构建器中使用

Fetch an id from pivot table to use in form builder in laravel

我需要帮助来访问我的数据透视表 table 中的外国 ID,以便在表单生成器 select 表单中使用。我试图在插入电影和 select 类别时创建一个表单,然后当我通过从数据透视表 table.

中获取 category_id 来连接它们时,它们将被连接

我使用多对多关系,我的 table 是电影和具有枢轴的类别 table 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>

首先你不需要csrf_field()调用(Form::open会为你注入一个)。您需要做的就是向控制器添加逻辑以处理 selected 类别。为您的 select 命名并使其成为 multiple 类型(因为您有多对多关系,您希望用户能够 select 电影的多个类别):

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

然后在您的控制器中存储新电影时,您可以从请求中读取 selected 'categories' 并附加它们:

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

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