Eloquent: Api Resource - не удается получить информацию из сводной таблицы. - PullRequest
0 голосов
/ 18 мая 2018


Я сейчас использую Laravel 5.6, я хочу создать контроль доступа пользователя.Я использую три таблицы: user (id, username, email, password), role (id, role, desc) и сводную таблицу role_user (user_id, role_id).Мой код, как показано ниже:

Модель пользователя

public function roles() {
    return $this->belongsToMany(Role::class);
}

Ролевая модель:

/**
* Role Model
*/
public function users() {
    return $this->belongsToMany(User::class);
}

API Ресурс:

/**
* Api Resource
*/
public function toArray($request)
{
   return [
      'id' => $this->id,
      'username' => $this->username,
      'email' => $this->email,
      'role' => $this->whenPivotLoaded('role_user', function (){
          return $this->roles->name;
      })
      ];
   }

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

{
    "data": {
        "id": 1,
        "username": "john",
        "email": "john.doe@mail.com",
    }
}

Может ли кто-нибудь помочь мне решить эту проблему??
Спасибо ~

Ответы [ 2 ]

0 голосов
/ 15 августа 2018

Попробуйте в вашем контроллере функцию, которая возвращает этот ресурс:

$user = User::where('id', '=', $id)->with('roles')->first();

, а затем return new UserResource($user);

0 голосов
/ 18 мая 2018

Измените $this->roles->name; на return $this->roles->name;

(не стыдно, мне понадобилось несколько минут, чтобы заметить это ?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...