2017-01-15 5 views
0

は、私は2つのテーブルを持っています。Laravel 5.2取得、ユーザーのノートとノートのユーザー

セカンド

コンテナのユーザノートはノートのIDを含むノートテーブルです。

私はそれらの間の関係many to manyを持っていると私はnote_Idに一致するuser_idが含まれているそれらの間の私の中間テーブルを持っています。

すべては完全に機能しますが、ユーザーノートと同じメモを持つ他のユーザーを取得したいと考えています。例えば

ID 1 1人のユーザー、2、3はそれを見ることができる

NOTE。

ログインしたユーザーが作成したメモをすべて取得するクエリと、このメモを表示できるother usersを使用したいとします。

私は

$usernotes = User::where('id', '=', Auth::user() -> id) -> first(); 
@foreach($usernotes -> notes as $usernote) 
     {{ $usernote -> title }} 
@endforeach 

この戻り、すべてのユーザーのノートを試みたが、すべてのノートのユーザーを返さないものを。 loggedInUserを除外するために

+0

$ usernotes = User :: where( 'id'、 '='、Auth :: user() - > id) - > first(); 'は現在のユーザを毎回与えます。そのために 'Auth :: user()'を直接使うのが良いでしょう。他のユーザーを取得することに関して。あなたはそれのために別のクエリを書く必要があります。 – linuxartisan

答えて

1

(あなたが尋ねると認証1を除く)このクエリは、ユーザーを取得しますがあります。

Note::whereHas('users', function($q) { 
    $q->where('id', auth()->user()->id); 
})->with(['users' => function($q) { 
    $q->where('id', '<>', auth()->user()->id); 
}])->get(); 
+1

私が探しているもの – user7420824

0
$loggedInUser = Auth::user(); 
@foreach($user->notes as $userNote) 
     Note Title: {{ $userNote -> title }} 
     @foreach($userNote->users as $user) 
      User Name: {{ $user->name }} 
     @endforeach 
@endforeach 

:同じノートに現在認証されたユーザを持つ

$loggedInUser = Auth::user(); 
@foreach($user->notes as $userNote) 
     Note Title: {{ $userNote -> title }} 
     @foreach($userNote->users()->where('id', '!=', $loggedInUser->id)>get() as $user) 
      User Name: {{ $user->name }} 
     @endforeach 
@endforeach 
+0

私はユーザー名を取得する方法を知っていますが、私は同じノートを共有する他のユーザーを取得するように頼んでいます – user7420824

+0

それは私が言及したことです。 $ userNote->ユーザーは、そのメモのすべてのユーザーを取得します。私は他のユーザーのみを取得するようにコードを修正します(loggedinuserを除外します) – Paras

+0

この解決策は[N + 1問題](https://laravel.com/docs/5.3/eloquent-relationships#eager-loading)を解決しません。ユーザーが50の音符を持っている場合、このコードは通常の2ではなく51の質問を作成します。 –