Получить массив идентификаторов из связанной модели laravel, которая имеет отношение ToMany

У меня есть роль модели, которая принадлежит многим пользователям.

Class Role {
     public $fillable = ["name"];

     public function users()
     {
          return $this->belongsToMany('App/Models/User')->select(['user_id']);
     }
}

Когда я получаю запросы пользователей с помощью запроса в роли. Я хочу, чтобы он возвращал только массив user_ids

 Role::with("users")->get();

он должен вернуть следующий вывод

 [ 
   {
     "name": "Role1",
     "users" : [1,2,3]
   },
   {
     "name": "Role2",
     "users" : [1,2,3]
   }
 ]

В настоящее время он дает следующий вывод

[ 
   {
     "name": "Role1",
     "users" : [
        {
           user_id : 1
        },
        {
           user_id : 2
        },

        {
           user_id : 3
        }
   },
   {
     "name": "Role2",
     "users" : [
        {
           user_id : 1
        },
        {
           user_id : 2
        },

        {
           user_id : 3
        }
     ]
   }
 ]

Ответ 1

Лично я не изменил бы отношения users(), но, возможно, добавлю идентификатор доступа для идентификаторов пользователя

class Role {
    protected $fillable = ["name"];

    // adding the appends value will call the accessor in the JSON response
    protected $appends = ['user_ids'];

    public function users()
    {
         return $this->belongsToMany('App/Models/User');
    }

    public function getUserIdsAttribute()
    {
        return $this->users->pluck('user_id');
    }
}

Затем у вас все еще есть рабочие отношения, но вы можете получить доступ к идентификаторам пользователя в виде массива в ответном роле. Если это не работает для вас, как упоминалось в @Creator, вы могли бы просто добавить ->lists('id') в отношение, а не select()