[
{
"id":2,
"firstname":"abc",
"lastname":"def",
"email":"abc@some.ac.uk",
"role":1,
"university":1,
"school_dept":5,
"year":2,
"photo":"URL",
"bio":"ObxBJIDO6IfOU0DIw8a5",
"search_status":"available",
"created_at":null,
"updated_at":null,
"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"
}
}
]
}
]
我想获取登录用户的language_id。 如果用户以id = 2(auth :: user() - > id)登录。
然后对于上面的数据我想收到输出:
$learn = 4(language_id)
$native= 3(language_id)
我试着这样做:
$learn = User::with('languages')->where([['languages.pivot.user_id',Auth::user()->id],['languages.pivot.type','learn']])
$teach = User::with('languages')->where([['languages.pivot.user_id',Auth::user()->id],['languages.pivot.type','native']])
用户和语言之间的关系是多对多的,额外的字段称为类型(本机或学习)作为支点。
User_table
id
name
....
Language_User
id
user_id
language_id
type('learn','native')
Language_table
id
language
答案 0 :(得分:1)
执行你所追求的事情的一种方法是约束关系,例如:
$learn = User::with(['languages' => function (Builder $q) {
$q->wherePivot('type', 'learn');
}])->where('id', Auth::user()->id);
如果是经过身份验证的用户,您可以这样做:
$learn = Auth::user()->languages()->wherePivot('type', 'learn')->get();
或者,如果您甚至可以将其定义为关系:
public function languagesToLearn()
{
return $this->languages()->wherePivot('type', 'learn');
}
然后你可以这样做:
$learn = User::with('languagesToLearn')->where('id', Auth::user()->id);
或
$learn = Auth::user()->languagesToLearn;
如果您想获得以后可以使用的语言:
Auth::user()->languagesToLearn()->pluck('language')
https://laravel.com/docs/5.3/queries#aggregates
希望这有帮助!