2016-06-27 13 views
0

私は基本的に次の形式を取るデータベース設計をしています(デモンストレーション目的では実際には必要ないので、多くのフィールドを削除しました)。私は、ユーザーテーブルにピボットテーブルに基づくクエリデータ

users 
+----+---------------+-----------------+ 
| id | name   | email   | 
+----+---------------+-----------------+ 
| 1 | ProjectA  | Something  |  
+----+---------------+-----------------+ 

を持っているユーザーは、多くのプロジェクト

projects 
+----+---------------+-----------------+-----------------+ 
| id | name   | description  | user_id   | 
+----+---------------+-----------------+-----------------+ 
| 1 | ProjectA  | Something  | 1    | 
+----+---------------+-----------------+-----------------+ 

を持つことができますので、それはまっすぐ十分と照会することは非常に簡単です。私ができるログインしたユーザーのためのすべてのプロジェクトが必要な場合

$loggedInUser = Auth::user()->getFirstName() . ' ' . Auth::user()->getLastName(); 
$loggedInUserId = User::where('userName', '=', $loggedInUser)->first(); 

$projectss = Project::all()->where('user_id', $loggedInUserId); 

これは少しばかげています。私はユーザーグループのピボットテーブルを持っています。それは本質的に、この

users_user_groups 
+----+---------------+-----------------+ 
| id | user_id  | group_id  | 
+----+---------------+-----------------+ 
| 1 | 1    | 2    |  
+----+---------------+-----------------+ 

私は、ユーザーが私の一部であり、どのようなグループを見つけるしたい場合は、私はその後、USER_GROUPSテーブルに

user_groups 
+----+---------------+ 
| id | group_name |    
+----+---------------+ 
| 1 | Group A  | 
+----+---------------+ 

を持って

$userGroups = Auth::user()->getGroups(); 

を行うことができます私の質問をされていますこの。上記では、どのようにしてユーザーのためにすべてのプロジェクトを手に入れることができるかを示します。今私はグループAと呼ばれるuser_groupがあることを知っています。私が本質的にやってみたいのは、ユーザーがグループAから離れているすべてのプロジェクトを取得することです。したがって、5人のユーザーがプロジェクトを作成してグループAにいる場合、 5つのプロジェクト。

どうすればこのようなことをやりますか?

答えて

1

まず、あなたはあなたがこれを行うことができますグループのユーザーに属しているすべてのプロジェクトを取得しようとしていると仮定すると、単にAuth::user()->id

を使用してユーザーIDを取得することができます

感謝。

$group = Group::with('users.projects')->find(1); 

グループのモデル、あなたが使用forign /主キーに応じて適切な関係のメソッドを作成する必要があります。もちろん、

​​

ユーザーモデル

public function projects() 
{ 
    return $this->hasMany('App\Project'); 
} 

関連する問題