Laravelで中間テーブルに複数の値を保存する

Laravelデータベース

Laravelでは、中間テーブルに複数の値を一度に保存することができます。

中間テーブルに保存用のフォームの作成方法も併せて、手順を解説していきますね。

Junko
Junko

Laravelの中間テーブルは便利です。

ぜひ、色々な使い方をおさえていきましょう♪

Laravelで中間テーブルに複数の値を保存する方法

まずプロジェクトを作成する等、準備をお願いします。

こちらの記事の④あたりまで進めておいてください。

(中間テーブルには、値を保存しなくてOKです。)

このあとの手順を解説します。

① ルート設定を作成する

フォーム表示用と保存用の2つを作成します。

【web.php】

② コントローラーを作成する

下記のコマンドを入力して、コントローラーを作成します。

作成した ClubControllerを開きます。

フォームを表示するためのindexメソッドを追加します。

【ClubController.php】

③ ビューファイルを作成する

resources/view/dashboard.blade.php の中に、次のようにフォームを作成します。

【dashboard.blade.php】

ブラウザに表示すると、次のようになります。

Junko
Junko

なお上記コードでは、CSSはTailwindを使っています。環境によって、classの部分は変えてくださいね。

④ 保存用のコードをつくる

再びClubControllerを開きます。

フォームを保存するためのstoreメソッドを追加します。

【ClubController.php】

最初にレコードのid部分を指定します。そのあと、レコードの各カラムにいれる値を連想配列の形で指定します。

なお今回はattachメソッドを使いました。attachは、同じ値の重複保存も可能です。

重複を避けたい場合は、syncメソッドを使ってくださいね。

Junko
Junko

多対多のリレーションで中間テーブルに値を保存する方法は、こちらの記事にまとめています。

⑤ テストをする

それでは、いよいよテストです。

ブラウザに値をいれて、きちんと中間テーブル club_userに保存されるか、チェックしてみてください。

 

⑥ おまけ:中間テーブル保存時にタイムスタンプも追加する方法

なお、デフォルトのままだと中間テーブルに保存したとき、タイムスタンプカラム(created_at, updated_at) に値が入りません。

タイムスタンプに値をいれるようにするには、リレーションを設定する際に、次のようにwithTimestampsを追加します。

【User.php】

withTimestampsを加えると、中間テーブルに、次のようにcreated_at、updated_atカラムに日時情報が入ります。

【club_userテーブル】

以上となります。

Laravelのリレーションに関する記事は他にも色々あるので、参考にしてくださいね。

まずは基本の中間テーブルの作成方法を知りたい方はこちらをどうぞ。

Laravelデータベース

【Laravelの教科書・無料プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

Laravel8版と、最新のLaravel9版、ふたつのテキストご用意してます♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

Laravel8版と、最新のLaravel9版、ふたつのテキストご用意してます♪

Laravel関連のご相談承ってます♪
「Webアプリを開発してほしい」
「社内にLaravelが分かる人がいない。コンサルしてほしい」
そんな企業様のご依頼承っています。
お問い合わせはこちら
Laravel関連のご相談承ってます♪
「Webアプリを開発してほしい」
「社内にLaravelが分かる人がいない。コンサルしてほしい」
そんな企業様のご依頼承っています。
お問い合わせはこちら
Twitter始めました。
40代からプログラミング!

コメント

タイトルとURLをコピーしました