Laravel 5.8 における belongsToMany の引数まとめ
- 第 1 引数では最終的な接続先モデル名を名前空間含めて指定する
- 第 2 引数では中間テーブル名を指定する
- 第 3 引数では接続元モデル ID を示す中間テーブル内のカラム名を指定する
- 第 4 引数では最終的な接続先モデル ID を示す中間テーブル内のカラム名を指定する
- 第 5 引数では接続元モデル ID のカラム名を指定する
- 第 4 引数では最終的な接続先モデル ID のカラム名を指定する
具体例
多対多リレーションを定義するために用いる WordPress のテーブル
データベース関連図 データベース構造 – WordPress Codex 日本語版 から抜粋です。
- 接続元: wp_term_taxonomy
- 主キー名: term_taxonomy_id
- 中間テーブル: wp_term_relationships
- 接続元のキー名: term_taxonomy_id
- 接続先のキー名: object_id
- 接続先: wp_posts
- 主キー名: ID
コード
接続元の TermTaxonomy モデルクラスに belongsToMany のメソッド posts を定義しました。
確認
おわりに
多対多 Eloquent:リレーション 5.8 Laravel が公式ドキュメントです。
これを読むと、第 4 引数までの指定方法しかありません。接続元と接続先のプライマリーキー名が id 以外の場合は belongsToMany は使えないのでしょうか?
そんなことはありません。
- Illuminate\Database\Eloquent\Concerns\HasRelationships | Laravel API
- framework/HasRelationships.php at 5.8 · laravel/framework
上記の公式 API ドキュメント、そして GitHub の Laravel コードを確認すると、第 7 引数まで指定できます。
そして、第 5 、第 6 引数が、接続元と接続先のプライマリーキー名ということもわかりました。
インターネットを検索しますと Laravel 公式ドキュメントの範囲内のみの使い方を説明しているページは多くありましたけれども、それを超える解説は見当たりませんでしたので、今回ノートいたしました。
以上です。
「Laravel 5.8 で多対多構造を belongsToMany の引数をほぼ使い尽くしてなんとしてでもリレーションを実現する方法」への2件の返信
[…] Laravel 5.8 で多対多構造を belongsToMany の引数をほぼ使い尽くしてなんとしてでもリレーションを実現する方法 – oki2a24 […]
ひと癖あるリレーションを設定したくて、なかなか情報にたどり着かず困っていたところ、まさに求めていた内容でとても参考になりました。
APIドキュメントのほうに詳細が記載されているのですね。出典の表示も助かりました!ありがとうございます。