在我的用户模型中,如果用户跟随其他用户,我有想要返回的功能。 这是我添加的功能:
public function ifAuthorizedFollows()
{
return $this
->hasMany('App\Follow', 'user_id')
->when(Auth::check(), function ($query) {
return $query->where('followed_id', $this->id);
});
->when(!Auth::check(), function ($query) {
return $query->where('followed_id', null);
});
}
我不知道如何获取用户正在检查配置文件的用户的id。如果我将$this->id
更改为例如。 1
它返回跟随对象 - 很好,但我需要获取实际看到的对象的id。
这是我将$this->id
更改为1
时获得的JSON:
{
"id": 1,
"name": "berde",
(...)
"updated_at": "2018-04-24 20:19:33",
"pages_count": 0,
"photos_count": 0,
"pages": [],
"if_authorized_follows": [
{
"id": 1,
"user_id": 1,
"followed_id": 1,
"followed_type": 4,
"created_at": "2018-04-25 08:32:21",
"updated_at": "2018-04-25 08:32:21"
}
]
}
在我的函数ifAuthorizedFollow中,我需要获取出现在该json中的ID并且$this->id
不起作用。
答案 0 :(得分:0)
因为它是一种关系(ifAuthorizedFollow
),你不能只返回任何东西,它必须返回一个实例。
但是,您可以在模型上创建Accessor
[...]
public function getFollowerIdAttribute()
{
return $this->ifAuthorizedFollow()->first()->followed_id;
}
[...]
这样你就可以在实体上调用访问者
$user = User::find(1);
$user->follower_id;
修改强>
由于您遇到$this->id
问题,这可能是偶然的上下文更改副作用,因此请务必使用以下关系:
public function ifAuthorizedFollows()
{
$id = $this->id;
return $this
->hasMany('App\Follow', 'user_id')
->when(Auth::check(), function ($query) use($id) {
return $query->where('followed_id', $id);
});
->when(!Auth::check(), function ($query) {
return $query->where('followed_id', null);
});
}
*注意闭包中的use ($id)