2017-01-15 2 views
0

У меня есть две таблицы:Laravel 5,2 GET заметки пользователя и ноты пользователи

первый

Is пользователи таблица, которые содержат информацию о пользователях, включая идентификатор пользователя.

Второй

ли заметки стол, который контейнер пользователь отмечает включая примечание идентификатор.

Я имею отношение many to many между ними и у меня есть промежуточный стол между ними, которые содержат user_id, который соответствует note_Id.

Все работает отлично, но я хочу получить заметки пользователей и других пользователей, имеющих одну и ту же заметку.

Например

Примечание 1 пользователей с идентификатором 1, 2, 3 может видеть.

Я хочу использовать запрос, который содержит все заметки, созданные пользователем в журнале, а также other users, которые могут просматривать эту заметку.

, что я пытался

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

Это возвращение всех заметок пользователя, но не возвращает пользователей всех нот.

+0

The statement '$ usernotes = User :: where ('id', '=', Auth :: user() -> id) -> first();' даст вам текущего пользователя каждый раз. Для этого лучше использовать 'Auth :: user()'. Что касается привлечения других пользователей; вам нужно написать другой запрос. – linuxartisan

ответ

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:

$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 заметок, этот код будет создавать 51 запрос вместо обычного 2. –