リレーションについてはこれ
こんなんできる
任意のポストについたコメントを取得する DB
posts id|post| 1|aaa| 2|bbb| comments id|post_id|string| 1|1|aaaa| 2|1|iiii| 3|2|uuuu|
ポスト1には、aaaa,iiiiの2つのコメント。
ポスト2には、uuuuという1つのコメント。
$comments = App\Post::find(1)->comments; foreach ($comments as $comment) { echo $comment->string . "\n"; }
aaaa iiii
ポスト1のコメント取得出来た。
リレーションを設定すると、面倒なqueryでのleftJoinとか書かなくていい。
書き方
公式コピペ。
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { /** * ブログポストのコメントを取得 */ public function comments() { return $this->hasMany('App\Comment'); } }
モデルにhasManyでリレーションつける。
hasOneは?
同じ感じに書きます。
今回、post1個に、commentが2つ。1対多だからhasMany。
1対1ならhasOne。
belongsToって?
逆に、commentからpostを引っ張ってきたいときに書く。書き方一緒。
DB設計の注意。
commentsのテーブルにpost_id
ってテーブル名の単数_id
で書いてたら、さっきの書き方でOK。
もし、外部キーとかが別の名前なら
public function user() { return $this->belongsTo('App\User', '外部キーのカラム名', '親元のid扱いのカラム名'); }
って感じで。
ややこしいしメンテ面倒なのでカラム名の規則は守りましょう。
日記
やばい。もうadvent calender迫ってる。一文字も書いてない。
とりあえず今日は疲れたので( ˘ω˘)スヤァ