如何在 Laravel 中存储多个 select 值
How to store multi select values in Laravel
我在类别和电影之间有多对多关系。当我检查类别的多个值并插入电影时,主页上的结果只选择了一个类别,而不是全部。我尝试了很多事情,但我无法解决这个问题。这是我的代码。
upload.blade.php:
<div class="form-group">
{!! Form::label('category_id', 'Category:') !!}
{!! Form::select('category_id', $categories, null, ['class'=>'form-control', 'multiple' => true]) !!}
</div>
控制器:
public function index(Request $request)
{
$categories = Category::pluck('category_name', 'id')->all();
return view('movies.upload', compact('categories'));
}
public function upload(MovieUploadRequest $request)
{
DB::beginTransaction();
try {
$movie = Movie::create($request->all());
$movie->categories()->attach($request->get('category_id'));
DB::commit();
} catch (\Exception $e) {
DB::rollBack();
}
return redirect('home');
}
你可以这样写。希望这会解决您的问题
<div class="form-group">
{!! Form::label('category_id', 'Category:') !!}
{!! Form::select('category_id[]', $categories, null, ['class'=>'form-control', 'multiple' => true]) !!}
</div>
要启用多个 select,您首先需要将 select 输入的名称从 category_id
更改为 category_id[]
。这样可以将多个变量作为数组发布。
代码应该如下所示:
<div class="form-group">
{!! Form::label('category_id', 'Category:') !!}
{!! Form::select('category_id[]', $categories, null, ['class'=>'form-control', 'multiple' => true]) !!}
</div>
在您的控制器中,您将需要遍历发布的 ID:
public function upload(...){
foreach( $request->input('category_id') AS $category_id ){
$movie = Movie::create($request->all());
$movie->categories()->attach($category_id);
...
}
}
编辑:
attach() 方法也接受一个 id 数组作为参数。因此,您不需要像上面那样循环输入,而可以简单地使用:
public function upload(...){
$movie = Movie::create($request->all());
$movie->categories()->attach($request->input('category_id'));
...
}
在您看来,使用如下名称:
<select name="yourfiled[]"></select>.
在controller中,要存入数据库,只需要写
$movies->categories = json_encode(yourfield);
完成。
我在类别和电影之间有多对多关系。当我检查类别的多个值并插入电影时,主页上的结果只选择了一个类别,而不是全部。我尝试了很多事情,但我无法解决这个问题。这是我的代码。
upload.blade.php:
<div class="form-group">
{!! Form::label('category_id', 'Category:') !!}
{!! Form::select('category_id', $categories, null, ['class'=>'form-control', 'multiple' => true]) !!}
</div>
控制器:
public function index(Request $request)
{
$categories = Category::pluck('category_name', 'id')->all();
return view('movies.upload', compact('categories'));
}
public function upload(MovieUploadRequest $request)
{
DB::beginTransaction();
try {
$movie = Movie::create($request->all());
$movie->categories()->attach($request->get('category_id'));
DB::commit();
} catch (\Exception $e) {
DB::rollBack();
}
return redirect('home');
}
你可以这样写。希望这会解决您的问题
<div class="form-group">
{!! Form::label('category_id', 'Category:') !!}
{!! Form::select('category_id[]', $categories, null, ['class'=>'form-control', 'multiple' => true]) !!}
</div>
要启用多个 select,您首先需要将 select 输入的名称从 category_id
更改为 category_id[]
。这样可以将多个变量作为数组发布。
代码应该如下所示:
<div class="form-group">
{!! Form::label('category_id', 'Category:') !!}
{!! Form::select('category_id[]', $categories, null, ['class'=>'form-control', 'multiple' => true]) !!}
</div>
在您的控制器中,您将需要遍历发布的 ID:
public function upload(...){
foreach( $request->input('category_id') AS $category_id ){
$movie = Movie::create($request->all());
$movie->categories()->attach($category_id);
...
}
}
编辑:
attach() 方法也接受一个 id 数组作为参数。因此,您不需要像上面那样循环输入,而可以简单地使用:
public function upload(...){
$movie = Movie::create($request->all());
$movie->categories()->attach($request->input('category_id'));
...
}
在您看来,使用如下名称:
<select name="yourfiled[]"></select>.
在controller中,要存入数据库,只需要写
$movies->categories = json_encode(yourfield);
完成。