class Post extends Model { /** * ブログポストのコメントを取得 */ public function comments() { return $this->hasMany('App\Comment'); } /** * リレーションシップ - usersテーブル * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function owner() { return $this->belongsTo('App\User', 'user_id', 'id', 'users'); } }
Eloquentは、Commentモデルに対する外部キーを自動的に決めることを心に留めてください。規約によりEloquentは、自分自身のモデル名の「スネークケース」に_idのサフィックスをつけた名前と想定します。ですから今回の例でEloquentは、Commentモデルの外部キーをpost_idであると想定します。
リレーションを定義したら、commentsプロパティによりコメントのコレクションへアクセスできます。Eloquentは「動的プロパティ」を提供しているので、モデルのプロパティとして定義したリレーションメソッドへアクセスできることを覚えておきましょう。
しかしPhoneモデルの外部キーがuser_idでなければ、belongsToメソッドの第2引数にカスタムキー名を渡してください。
/** * この電話を所有するUserを取得 */ public function user() { return $this->belongsTo('App\User', 'foreign_key'); }
親のモデルの主キーがidでない、もしくは子のモデルと違ったカラムで紐付けたい場合は、親テーブルのカスタムキー名をbelongsToメソッドの第3引数に渡してください。
/** * この電話を所有するUserを取得 */ public function user() { return $this->belongsTo('App\User', 'foreign_key', 'other_key'); }