Разъяснение с нетерпением загрузки / мутаторы / аксессуары для laravel - PullRequest
0 голосов
/ 01 октября 2018

Я создаю приложение laravel для работы, и мне нужно загрузить всех пользователей с их прикрепленной ролью без какого-либо вложения ролей.Я использовал этот урок для ролей: https://medium.com/@ezp127/laravel-5-4-native-user-authentication-role-authorization-3dbae4049c8a.Если я использую public $with = ['roles']; в моей пользовательской модели, он возвращает весь объект роли в пользовательском объекте, и мне нужно, чтобы он просто возвращал роль: 'role_name';

 /**
 * set up eloquent between roles/user
 *
 * @return \Illuminate\Database\Eloquent\Relations\belongsToMany
 */
public function roles() 
{
    return $this->belongsToMany(Role::class);
}

Выше указано в моей пользовательской модели и ниже.в моей ролевой модели, чтобы определить отношения.

 /**
 * provides a many-to-many relationship to User model
 *
 * @return User::class
 */
public function users()
{
  return $this->belongsToMany(User::class);
}

Я подумал, что, добавив это к модели User:

protected $appends = ['role_name'];

public function getRoleNameAttribute()
{
    return $this->attribute['name'];
}

, он вернет все, но все, что он делает, - это создание role_name: 'user_name';На модели.Так что, я думаю, я понимаю, что у меня есть доступ только к таблице «Пользователи», а не к таблице «Роли» в БД, но, опять же, я не совсем уверен, что делать.Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Проблема в том, что вы возвращаете $this->attributes['name'] в getRoleNameAttribute.Вы хотите role names, поэтому вместо этого вы должны сделать что-то вроде этого:

Если вы хотите массив с именами:

return $this->roles()->pluck('name')

Если вы хотите, чтобы имена были в виде строки:

return array_implode(", ", $this->roles()->pluck('name')->toArray());
0 голосов
/ 01 октября 2018

Если для удобства вам необходим доступ к имени роли непосредственно из модели, вам следует обратиться к фактическим данным отношения:

protected $appends = ['role_name'];

public function getRoleNameAttribute()
{
    return $this->roles()->pluck('name');
}

Это должно добавить массив имен ролей к вашей модели пользователя.,Это будет массив, потому что роли, похоже, имеют отношение многие ко многим с моделью User.

...