在 laravel 5.3 中查找用户配置文件匹配项
Finding a user profile match in laravel 5.3
我有一个说母语的用户可以说英语并且想学习法语.
我如何找到用户母语是法语并且想学习英语的匹配列表。
它是一个语言交换程序,所以我想列出匹配的用户。
我有用户 Language_User 和语言 table。在 Language_User table 中,我有一个名为类型(学习或本机)的额外字段。
用户
编号
名字
...
Language_User
编号
user_id
language_id
类型('learn','native')
语言
编号
语言
查询
首先,我获取所有不具有 'Admin' 角色或不是 him/herself.
角色的用户
$other_users = User::with('languages')->with('departments')->with('hobbies')->with('universities')->with('years')->where([['id', '<>', Auth::user()->id],['role', '<>', 2]])->get();
然后,我让登录用户 $learn language 和 $native language 与其他用户进行比较
$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 条件放在一起,一个用于检查母语,一个用于检查学习语言。如果我这样做:
@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'])
我没有得到任何行,而用户确实存在匹配项。
我想是因为我在一个数组中有两个枢轴类型 learn 和 native。如何比较学习和本地?下面显示的语言格式。它的多对多关系
"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;
您的 blade 部分可能类似于:
@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
希望对您有所帮助!
我有一个说母语的用户可以说英语并且想学习法语.
我如何找到用户母语是法语并且想学习英语的匹配列表。 它是一个语言交换程序,所以我想列出匹配的用户。
我有用户 Language_User 和语言 table。在 Language_User table 中,我有一个名为类型(学习或本机)的额外字段。
用户
编号
名字
...
Language_User
编号
user_id
language_id
类型('learn','native')
语言
编号
语言
查询
首先,我获取所有不具有 'Admin' 角色或不是 him/herself.
角色的用户$other_users = User::with('languages')->with('departments')->with('hobbies')->with('universities')->with('years')->where([['id', '<>', Auth::user()->id],['role', '<>', 2]])->get();
然后,我让登录用户 $learn language 和 $native language 与其他用户进行比较
$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 条件放在一起,一个用于检查母语,一个用于检查学习语言。如果我这样做:
@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'])
我没有得到任何行,而用户确实存在匹配项。
我想是因为我在一个数组中有两个枢轴类型 learn 和 native。如何比较学习和本地?下面显示的语言格式。它的多对多关系
"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;
您的 blade 部分可能类似于:
@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
希望对您有所帮助!