Laravel 5.8 Eloquent:リレーション

この記事は約3分で読めます。
Eloquent:リレーション 5.8 Laravel

Laravelのリレーション 多対多 中間テーブルについてです。
急にプログラミング関連のブログなんて!って思うかもしれませんがここにまとめたらモチベになるかもなので書いていきます。

やりたいこと

3つ表があります。
ここから社員名と配属されている部門の名前を取り出したいです。
社員によっては複数の部門に配属しています。

1.全社員の一覧
(ユーザ名とユーザーID)

2会社の部門のIDと部門名の一覧

3.全社員のID(1のユーザーIDと同じ)と部門ID(2の部門IDと同じ)の一覧

現状

全然わからない

Laravelのリレーション使ったら簡単にできるよってらしいけどどこに何が必要なのか…

tb_user
user_id
name

departments
deparment_id
deparment_name

department_user
id
department_id
user_id

とりあえずやったけどダメだったこと

3の表のモデルにbelongsToManyで

1のユーザ名を紐付け

public function user() {return $this -> belongsToMany('App\Http\Models\User', 'user_name');}

2の部門名を紐付け

public function depart() { return $this -> belongsToMany('App\Http\Models\Depart', 'department_name');}

これが正解

department_userモデルに追記するリレーション

ユーザーモデルとのリレーション

department_userのuser_idとusersのuser_idでリレーションするよ〜ってこと!
hasManyでした!

public function users()    {
return $this->hasMany(Users::class, 'user_id', 'user_id');    
}  

部門モデルとのリレーション

department_userのdepartment_idとusersのdepartment_idでリレーションのするよ〜ってこと!

public function depart()    {
return $this->hasMany(Depart::class, 'department_id', 'department_id');    
}   

呼び出す時のメソッドの記述

withのなかにさっきの2つのリレーションを書いてあげればOK

public function scopedptuser()    {        
return $this->with('users')        
->with('depart')        
->get();    
}

最後に

プログラミングは(やれば)誰でもできる!

やればできるこYDK!!!

コメント

タイトルとURLをコピーしました