2017-12-10 7 views
3

は、私のテーブル構造である:Laravelの関係で2つの結合を行うにはどうすればよいですか?ここ

// roles 
+----+-------+ 
| id | name | 
+----+-------+ 
| 1 | admin | 
| 2 | stuff | 
+----+-------+ 

//pages 
+----+---------------------+ 
| id |   path  | 
+----+---------------------+ 
| 1 | users/list   | 
| 2 | users/list/paginate | 
| 3 | users/make   | 
| 4 | posts/add   | 
| 5 | posts/edit   | 
+----+---------------------+ 

page_role 
+---------+----------+ 
| page_id | role_id | 
+---------+----------+ 
| 1  | 1  | 
| 1  | 2  | 
| 1  | 3  | 
| 1  | 4  | 
| 1  | 5  | 
| 2  | 4  | 
| 2  | 5  | 
+---------+----------+ 

私がやろうとしているすべては、各ロールのすべてのページを取得しています。 Laravelの関係を使って、どうすればいいですか?ここで


純粋なSQLで私の現在の回避策です:それぞれの役割を使用するすべてのページを取得し、その後

public function pages() 
{ 
    return $this->belongsToMany(Page::class); 
} 

SELECT p.* FROM roles r 
INNER JOIN page_role pr on r.id = pr.role_id 
INNER JOIN pages  p on p.id = pr.page_id 
ORDER BY p.id DESC 
+0

私はあなたの質問への答えupvote(さえない有用なもの)を見ることができます。あなたが私の答えをupvoteしない理由は何ですか?あなたのフィードバックは、私が答えの質を向上させるのに役立つか、何かが恋しくなるかもしれません。 –

答えて

0

は最初RoleモデルでbelongsToMany()の関係を定義しますwith()方法:

$rolesWithPages = Role::with('pages')->get(); 

その後は、役割ごとに役割とページを反復処理することができるようになります:

@foreach ($rolesWithPages as $role) 
    Role: {{ $role->name }}<br> 
    @foreach ($role->pages as $page) 
     Page: {{ $page->title }}<br> 
    @endforeach 
@endforeach 
+0

これに 'where()'節を追加するにはどうすればいいですか? '$ rolesWithPages = Role :: with( 'pages') - > get();' *(ロールテーブルのどこに適用したいか)* – stack

+1

ロールテーブルの場合は@stack、この 'Role :: with(' pages ') - > where(' status '、1) - > get() ' –

+0

あなたは知っています、私は本当に混乱しています。 'belongsTo'、' hasOne'、 'hasMany'、' manyToMany'などです!これらすべてのもののリストはありますか? – stack

関連する問題