2018.12.4
団体用集金システムを作りたい!#14【EloquentORM-リレーション-】
ORMを使うメリットとしては、厄介なJOINとかもプログラムとして最初から定義しておくことが可能なことです。
ということで、今日はそのあたりをお勉強していきたいと思います。
リレーションのページに書いてあることの丸写しですけどね。
まずは1対1関係のリレーション定義。
今回のプロダクトの例だと・・・・・・あれ、なくない?(笑)
なんかなさそーなので次いきます(笑)
次は1対多のリレーション定義です。まぁこれは多いと思います。例をあげると、ブログの記事に対するコメントなんかが当てはまりそうですね。1つの記事に対して、たくさんのコメントという形です。
今回のプロダクトだと、団体とそのメンバーの構図が当てはまりそうですね。
public function belongs()
{
return $this->hasMany('App\Belong',"b_id");
}
「団体」は多数の「ユーザー」を持っている、というリレーションがこの1文で示せます。ちなみに、BelongというのはUserに紐付いたデータなんですが、グループ管理者側からユーザー情報が弄れたりするので、セキュリティ的な観点から敢えてユーザーとテーブルを異にしてます。
つまりグループ管理者から、他のグループの情報に影響が出ないようにしているわけですね。
public function org(){
return $this->belongsTo('App\Org',"o_id");
}
逆に、Belongからだとこんな感じにデータが取ってこれます。
もいっこ進んだ例だと、
中間テーブルを用いた、多対多の関係も引っ張ってこれます。
ちょっと例としてはアレなんですが、UserとOrg、つまりユーザーデータと団体データを紐づけてみましょう。
public function orgs(){
return $this->belongsToMany('App\Org',"belongs","u_id","o_id");
}
これでユーザーのトップページから、自分が所属している団体の一覧が取ってこれます。
ビューのほうはどうなっているのかっていうと・・・・・・
そう、これだけの記述で済むんです・・・・・・。JOINとか自分で書かなくてもいいんですよね・・・・・・。便利・・・・・・。
その結果、こんな感じのページが生まれます。
では、次はこのテスト団体の内部に手を加えていきますよ〜〜〜(笑)