2016-06-30 24 views
2

4つのテーブルがあります:ユーザー、所有者、グループがあり、所有者と要求の間には直接関係はありませんし、私が何かをする方法を探していますの関係 - Laravel雄弁

を要求$ onwer-> requestsのように、所有者に関連するすべてのリクエストを取得します。ここで

は、物事がどのように動作するかです:

すべてのユーザがグループであり、各グループは所有者によって所有され、要求がユーザーによって作成され、各要求は、グループ(内/に関連する)ためです。
所有者:ID、ユーザ名
グループ:ID、名前、OWNER_ID、年 ユーザー:

テーブルはこのようにしているID、ユーザ名
group_user:ID、GROUP_IDは、
要求USER_ID:IDを、 GROUP_ID、USER_ID、DESC

それは、または要求とユーザー間の所有者とグループ間の関係を簡単に作成できますが、どのように私は所有者に関連するすべての要求を得ることができますか?他の事は、私はすべてのリクエストが=何か年のようなどこ文を使用してグループ内にある所有者に属して取得することができるはずです。

グループと要求間の多くの関係1つありますので、私はグループからのすべての要求を取得することができます:今、私はこのような愚かな何かをやっているために

(グループhasManyの要求)同じものを探している誰のために

$groups = Group::where('owner_id', $owner_id)->get(); 

foreach($groups as $group) 
    foreach($group->requests as $request) 
     if($request->year == 2016) 
      $requests[] = $request; 
+1

あなたは、おそらくhasManyThrough' 'を探しています。 $ this-> hasManyThrough(\ App \ Request :: class、\ App \ Group :: class); 'を返すことができます。それは、「私は所有者クラスであり、グループエンティティを介して多くのリクエストを受けています」と言います。あなたの 'group'はすでに' owner_id'を持っていて、あなたの要求は 'group_id'を持っているので、うまくいくはずです。 –

+0

はい、それは仕事をしました。ありがとうございました。なぜ私が* laravelドキュメントの多くの*セクションを読んだことがないのか分かりません。 – Ravexina

答えて

1

は、この背後にある考え方は、LaravelhasManyThroughと呼ばれています。この場合

、我々はオーナーズクラスモデル

public function requests() { 
    return $this->hasManyThrough(\App\Request::Class, \App\Group::Class); 
} 

を、以下の機能を持つことになり、ここで論理はGroupクラスOwnerRequests(第一パラメータ)をたくさん持っているということです(第2パラメータ)。