Laravelで中間テーブルの値を取得するならwithPivotを使おう

Laravelデータベース

Laravelで中間テーブルの値を取得するなら、withPivotが使えます。

中間テーブルの作成、リレーションの設定方法も含め、withPivotの使い方を解説しますね。

 

Junko
Junko

中間テーブルは、とにかく便利です。

色んな技を頭の中にいれておいて、いざというとき、取り出していきましょう♪

Laravelで中間テーブルの値を取得するならwithPivotが使える

今回は、次のような形でデータベースを作成します。

【今回使うデータベーステーブル】

なおLaravelのプロジェクト、ログイン認証機能は既に搭載済みという前提で解説します。

Userテーブルは、デフォルトであるものを利用します。

本記事を通じて、Clubテーブルを新たに作り、さらにUserテーブルとClubテーブルの中間テーブルを作成します。

このデータベースに格納したデータを使って、次のような画面を作成します。

【今回作成する画面】

ログインしたユーザーの所属しているクラブ、活動日、そしてユーザーにとってのクラブの位置づけが表示される形です。

このクラブの位置づけ情報は、中間テーブルのnoteカラムに入っています。

【withPivotを使って取り出すカラムはここ!】

それでは、ひとつずつ手順を説明していきますね。

① Clubモデルとテーブルを作る

下記コマンドでClubモデルとテーブルを作成します。

Clubモデルには、次のようにリレーションを設定しておきます。

【App\Models\Club】

マイグレーションファイルには、次のようにいれます。

【database/migrations/日付_create_clubs_table.php】

ファイルを保存後、php artisan migrate を実行します。

② Userモデルを編集する

Userモデルには、次のようにいれておきます。

【App\Models\User】

ここで、withPivot使っています。

上記のように書くことで、中間テーブル(pivot)の中のカラム、noteを簡単に取得できます。

③ 中間テーブルを作成する

下記コマンドを実行して、中間テーブル用のマイグレーションファイルを作ります。

マイグレーションファイルには、次のようにいれます。

【database/migrations/日付_create_clubs_users_table.php】

ファイルを保存後、php artisan migrate を実行します。

④ データを作っておく

各テーブルに、次のようにデータをいれておきましょう。

【usersテーブル】

【clubsテーブル】

【club_user中間テーブル】

 

本当はデータを保存するフォームを作成したりするほうが良いのですが、今回はとりあえず、データベースに直接入れちゃいます。

挿入タブをクリックし値をいれ、保存していきます。

Junko
Junko

なおデータベースを直接編集する以外に、tinkerを使ってデータを入れる手もあります。参考記事はこちら。

⑤ ビューファイルを作る

次に、ビューファイルを作成します。

今回はデフォルトである dashboard.blade.phpを使います。

ルート設定は下記のとおり。

【web.php】

ビューファイルは次のようにいれます。

【dashboard.blade.php】

上記は Breezeを使って作成しています。cssはTailwindを使っています。

ほかの環境でご利用になると、適切に表示されません。その場合、下記の部分だけ、お好きな場所に貼り付けて使ってくださいね。

⑥ テストをする

最後にテストをします。

id番号が1のユーザーとしてログインした状態で、/dashboardにアクセスします。

すると、下記のように表示されます。

このように表示されていれば、テスト成功です!

⑦おまけ

ちなみに、ビューファイルでは pivot を使って中間テーブルの値を取り出しました。

【dashboard.blade.php】

もしpivotではない名前にしたい時には、Userモデルのリレーションを設定した箇所に、asを追加します。たとえば、detailsという名前にするなら、下記のようにします。

【App\Models\User】

こうすると、pivotではなく、detailsを使って、中間テーブルの値を取り出せます。

【dashboard.blade.php】

さいごに

中間テーブル、今回ご紹介したwithPivotも使って、便利に活用していってくださいね。

中間テーブルの基本は、下記の記事で解説しています。

なお中間テーブルに複数の値を同時に保存する方法は、別記事にて解説しています。

Junko
Junko

今回の記事の続編のような内容です。よかったら併せて参考にしてくださいね。

Laravelデータベース

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

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

【無料プレゼント】

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

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

詳細はこちらをクリック
【LaravelでWebアプリ開発します】

「会員制サイトを作ってほしい」「開発の時間がないから頼みたい!」

こんなご要望承り中。オンラインミーティングでも、ご相談承ります。

サンプルやお見積もり目安を見てみる

Twitter始めました。
40代からプログラミング!

コメント

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