如何从模型中获取id

时间:2018-04-25 09:16:07

标签: php laravel laravel-5 lumen

在我的用户模型中,如果用户跟随其他用户,我有想要返回的功能。 这是我添加的功能:

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不起作用。

1 个答案:

答案 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)