У меня есть пользователь, который говорит родной язык скажем английский и хочет изучать французский.
Как я могу найти список совпадений, где пользователи родной французский и хочет выучить английский язык.
Это программа обмена языками, поэтому я хотел бы перечислить пользователей с совпадением.
У меня есть пользователи, Language_User и языковая таблица. в таблице Language_User у меня есть дополнительное поле с именем type (учиться или родной).
Я бы
название
…
Я бы
Идентификатор пользователя
LANGUAGE_ID
типа ( «учиться», «родной»)
Я бы
язык
Сначала я получаю всех пользователей, которые не имеют роли «Администратор» или не являются его / ее.
$other_users = User::with('languages')->with('departments')->with('hobbies')->with('universities')->with('years')->where([['id', '<>', Auth::user()->id],['role', '<>', 2]])->get();
Затем я получаю логин пользователей $ изучать язык и $ родной язык для сравнения с другими пользователями
$learn = Auth::user()->languages()->wherePivot('type', 'learn')->select('language_id')->first();
$native = Auth::user()->languages()->wherePivot('type', 'native')->select('language_id')->first();
дает зарегистрированному пользователю язык для изучения
{{$learn->language_id}}
дает залогиненный пользовательский родной язык
{{$native->language_id}}
Посмотреть код
@foreach($other_users as $user)
@foreach($user->languages as $lang)
@if($lang['pivot']['type'] ==='native' AND $lang['pivot']['language_id'] ===$learn['language_id'])
<tr>
<td>{{$user->firstname}} </td>
<td>{{$user->lastname}} </td>
<td>{{$user->email}} </td>
<td>{{$user->photo}} </td>
<td>{{$user->bio}} </td>
<td>{{$user['universities']->university}} </td>
<td>{{$user['departments']->department}} </td>
<td>{{$user['years']->year}} </td>
<td>
@foreach($user->languages as $lang)
@if($lang['pivot']['type'] === 'native')
{{$lang["language"]}}
@endif
@endforeach
</td>
<td>
@foreach($user->languages as $lang)
@if($lang['pivot']['type'] === 'learn')
{{$lang["language"]}}
@endif
@endforeach
</td>
<td>
@foreach($user->hobbies as $hobby)
{{$hobby->hobby}} <br>
@endforeach
</td>
</tr>
@endif
@endforeach
@endforeach
Я не могу поставить два если условия одна для проверки родного языка и одна для проверки изучения языка. если я делаю так:
@if($lang['pivot']['type'] ==='native' AND $lang['pivot']['language_id'] ===$learn['language_id'])
@if($lang['pivot']['type'] ==='learn' AND $lang['pivot']['language_id'] ===$native['language_id'])
Я не получаю строк, в то время как пользователь существует с совпадением.
Я думаю, потому что у меня есть два основных типа обучения и родного в массиве. Как сравнить как учиться и родной? ниже показан формат языка. его много ко многим
"languages":[
{
"id":3,
"language":"Spanish",
"pivot":{
"user_id":2,
"language_id":3,
"type":"native"}
},
{
"id":4,
"language":"Greek",
"pivot":{
"user_id":2,
"language_id":4,
"type":"learn"}
}
]
Вместо того, чтобы перебирать всех пользователей в базе данных, вы можете просто ограничить ваш запрос:
$native = Auth::user()->languages()->wherePivot('type', 'native')->first();
$learn = Auth::user()->languages()->wherePivot('type', 'learn')->first();
$other_users = User::with('departments', 'hobbies', 'universities', 'years', 'languages')
->where('id', '<>', Auth::user()->id)
->where('role', '<>', 2)
->whereHas('languages', function ($query) use ($learn) {
$query->where('type', 'native')->where('id', $learn->id);
})
->whereHas('languages', function ($query) use ($native) {
$query->where('type', 'learn')->where('id', $native->id);
})
->get();
Кроме того, просто к вашему сведению, $lang['pivot']['type']
также может быть записано как:
$lang->pivot->type;
Ваша секция лезвия может выглядеть примерно так:
@foreach($other_users as $user)
<tr>
<td>{{ $user->firstname }} </td>
<td>{{ $user->lastname }} </td>
<td>{{ $user->email }} </td>
<td>{{ $user->photo }} </td>
<td>{{ $user->bio }} </td>
<td>{{ $user->universities->university }} </td>
<td>{{ $user->departments->department }} </td>
<td>{{ $user->years->year }} </td>
<td>
{{ $user->languages->where('pivot.type', 'learn')->first()->language }}
</td>
<td>
{{ $user->languages->where('pivot.type', 'native')->first()->language }}
</td>
<td>
{!! $user->hobbies->pluck('hobby')->implode('<br>') !!}
</td>
</tr>
@endforeach
Надеюсь это поможет!
Других решений пока нет …