Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

tk90's avatar
Level 1

Saving multiple records to database with many to many relation

Hi, i would like to save multiple categories to my movies. Tables: movies: id, name etc. categories: id, name category_movie: id_category, id_movie

Category Model:

public function movies()
{
    return $this->belongsToMany(Movie::class);
}

Movie Model:

public function categories()
{
    return $this->belongsToMany(Category::class);
}

Form:

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

Create Method:

request()->validate([
        'title' => 'required'
]);

$movie = new Movie;
$movie->title       = $request->title;

$movie->save();
$movie->categories()->attach($request->category_id);

//Movie::create($request->all());
//return redirect()->route('/')->with('success', 'Film gespeichert');

Session::flash('success', 'Film gespeichert');
return Redirect::to('/');

It only stores one category to the database.

0 likes
6 replies
bashy's avatar

You will want to do category_ids for the fields and then do this to save them in the pivot;

$movie->categories()->sync($request->category_ids);
1 like
tk90's avatar
tk90
OP
Best Answer
Level 1

hmm i've tried this:

Store

$movie->save();
$movie->categories()->attach($request->categories);

Form:

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

This work's.

1 like
tomopongrac's avatar

That is because $request->categories is array ...

To check that you can execute this ...

dd($request->categories);
$movie->save();
$movie->categories()->attach($request->categories);
1 like
tk90's avatar
Level 1

Thank you. Is it possible to shorten the code like

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

and add the attach()?

1 like
tk90's avatar
Level 1

Ah, i see this:

public function store(Request $request)
    {
        request()->validate([
            'title' => 'required'
        ]);

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

        Session::flash('success', 'Film gespeichert');
        return Redirect::to('/');
    }
    

works fine.

1 like

Please or to participate in this conversation.