web-dev-qa-db-ja.com

関連するlaravel belongsToMany関係を持つモデルからID配列を取得する

多くのユーザーに属するモデルロールがあります。

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

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

Roleでクエリを使用してユーザーを取得する場合。私はそれが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
        }
     ]
   }
 ]
18
sp11

個人的には、users()関係は変更しませんが、ユーザーIDのアクセサーを追加する可能性があります

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

その後、まだ関係がありますが、ロール応答の配列としてユーザーIDにアクセスできます。 @Creatorが述べたように、それがうまくいかない場合は、おそらく->pluck('id')ではなく、select()をリレーションシップに追加することができます。

30
benJ