【发布时间】:2017-02-07 12:45:00
【问题描述】:
我有一个说母语的用户说英语并想学习法语。
如何找到用户母语是法语并希望学习英语的匹配列表。 它是一个语言交换计划,所以我想列出匹配的用户。
我有用户、语言用户和语言表。在 Language_User 表中,我有一个名为 type(learn 或 native) 的额外字段。
用户
身份证
名字
...
Language_User
身份证
user_id
language_id
type('learn','native')
语言
身份证
语言
查询
首先,我获取所有不具有“管理员”角色或不是他/她本人的用户。
$other_users = User::with('languages')->with('departments')->with('hobbies')->with('universities')->with('years')->where([['id', '<>', Auth::user()->id],['role', '<>', 2]])->get();
然后,我让登录用户 $learn 语言和 $native 语言与其他用户进行比较
$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'])
我没有得到任何行,而用户确实存在匹配。
我想是因为我在一个数组中有两个枢轴类型 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"
}
}
]
【问题讨论】:
-
只是为了仔细检查,您只想显示一个想要学习
Auth::user()母语的其他用户的列表并且他们的母语是Auth::user()想学吗? -
@RossWilson 是的。正确
-
另外,我是否正确假设用户可以想学习不止一种语言?
-
@RossWilson 不,一个人可以学习或教授的语言数量必须正好是一种。但是在寻找匹配的用户时。可能会有用户列表,因为如果我想学习法语和教英语,可能会有 100 多个个人资料想要我的偏好,反之亦然。
标签: php laravel-5 eloquent laravel-5.3 querying