Как получить идентификатор из модели - PullRequest
0 голосов
/ 25 апреля 2018

В моей пользовательской модели у меня есть функция, которую я хочу вернуть, если пользователь следует за другим пользователем.Это функция, которую я добавил:

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);
    });
}

Я не знаю, как получить идентификатор пользователя, который вошел в систему, проверяет профиль.Если я изменю $this->id на eg.1 он возвращает следующий объект - это нормально, но мне нужно получить идентификатор объекта, который на самом деле видит.

Это JSON, который я получил при изменении $this->id на 1:

{
  "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 и $this->id не работает.

1 Ответ

0 голосов
/ 25 апреля 2018

, поскольку это отношение (ifAuthorizedFollow), вы не можете просто ничего вернуть, оно должно вернуть реальность. Однако вы можете создать Accessor на вашей модели

[...]
public function getFollowerIdAttribute()
{
    return $this->ifAuthorizedFollow()->first()->followed_id;
}
[...]

таким образом вы сможете вызывать метод доступа к объекту

$user = User::find(1);
$user->follower_id;

Edit:

Поскольку у вас есть проблемы с $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) в закрытии

...