Eloquentで中間テーブルのデータを取得する


いやー、ドラクエ11面白いですね!他のこと全て放ってやっていました!そしてトロコンもしましたので、久々にサイトを更新…
前回、Eloquentについて書きました。中間テーブルを使ってなんやかんや。
その応用だ~ということで同じような構成のテーブルからデータを取ってきたのですが、ちょっと詰まって調べたのでメモです。

何をしたいのか?

下記のようなテーブルがあります。

  • book(書籍情報テーブル)
  • author_mapping(中間テーブル)
  • author(著者テーブル)

前回と違うのは…中間テーブルにあるデータも取りたい!ということなのです。
というのも、1冊の書籍に1人の著者!とは決まっていませんよね。
複数人の著者がいる場合、作画、原作、企画…色々な役割がありますよね。その情報を中間テーブルに持たせていたのです。その情報が\ホシーイ/

pivotを使うんですってよ

はい、公式マニュアルにしっかり載ってました…
困ったらマニュアル!迷ったらマニュアル!!ちゃんと見なさい!!( ‘д‘⊂彡☆))Д´) パーン

中間テーブルのカラム取得
既に学んだように、多対多リレーションの操作には中間テーブルが必要です。Eloquentこのテーブルを操作する便利な手段を用意しています。例としてUserオブジェクトが関連するRoleオブジェクトを持っているとしましょう。このリレーションへアクセスした後、モデルのpivot属性を使い中間テーブルにアクセスできます。

なるほどなるほど…と、私はここだけ読んで先走りました。
以下、失敗例です。

Modelはこんな感じです。

author_mappingにremarkというカラムを持たせていたので、こんな感じで取れるのかな?と試しに回してみました。

出てこない/(^o^)\

マニュアルは最後まで読もう

デフォルトでモデルキーはpivotオブジェクト上のものを表しています。中間テーブルがその他の属性を持っている場合、リレーションを定義するときに指定できます。

その他の属性というのが私が欲しいremarkですね。
つまり、Modelで下記のようにしてあげないとダメだったのです。

これで先程のforeach文はきちんと動作してremarkの取得ができましたとさ、めでたしめでたし…

みんな、マニュアルはちゃんと読もうね!!

スポンサーリンク
レクタングル(大)
レクタングル(大)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする