2017-01-30 8 views
0

jsonレスポンスで利用できる新しい属性を単に追加しようとしていますが、なんらかの理由でオブジェクトの関係も取得されています。

// user model 
protected $guarded = ['id']; 
protected $appends = ['role_name']; 
protected $hidden = ['remember_token', 'password']; 

public function getRoleNameAttribute() 
{ 
    return $this->role->type; 
} 

public function role() 
{ 
    return $this->belongsTo(Role::class); 
} 

// role model 
public function users() 
{ 
    return $this->hasMany(User::class); 
} 

私はdd($user);を使用するときに、私は

User {#303 
    #guarded: array:1 [ 
    0 => "id" 
    ] 
    #appends: array:1 [ 
    0 => "role_name" 
    ] 
    #hidden: array:2 [ 
    0 => "remember_token" 
    1 => "password" 
    ] 
    #connection: null 
    #table: null 
    #primaryKey: "id" 
    #keyType: "int" 
    #perPage: 15 
    +incrementing: true 
    +timestamps: true 
    #attributes: array:7 [ 
    "name" => "testing" 
    "email" => "[email protected]" 
    "password" => "$2y$10$fogQXhJZm5eoViM38pge1.BmNxY7IFl515zT83.Ks9Uj26kK9T6Im" 
    "role_id" => "83eee2e0-8939-48f7-9fbc-1c077e2265e5" 
    "id" => "a181fb4b-b65a-47b4-9c72-21ea15c6c5a6" 
    "updated_at" => "2017-01-30 20:23:52" 
    "created_at" => "2017-01-30 20:23:52" 
    ] 
    #original: array:7 [ 
    "name" => "testing" 
    "email" => "[email protected]" 
    "password" => "$2y$10$fogQXhJZm5eoViM38pge1.BmNxY7IFl515zT83.Ks9Uj26kK9T6Im" 
    "role_id" => "83eee2e0-8939-48f7-9fbc-1c077e2265e5" 
    "id" => "a181fb4b-b65a-47b4-9c72-21ea15c6c5a6" 
    "updated_at" => "2017-01-30 20:23:52" 
    "created_at" => "2017-01-30 20:23:52" 
    ] 
    ... 
} 

return response()->json(compact('user'));を得る代わりに、私は

user: { 
    created_at: "2017-01-30 20:26:12" 
    email:"[email protected]" 
    id:"4b83e031-e8c8-4050-963d-446cb383fb14" 
    name:"testing" 
    role:{ 
     created_at:"2016-12-29 10:54:02" 
     id:"83eee2e0-8939-48f7-9fbc-1c077e2265e5" 
     type:"user" 
     updated_at:"2016-12-29 10:54:02" 
    } 
    role_id:"83eee2e0-8939-48f7-9fbc-1c077e2265e5" 
    role_name:"user" 
    updated_at:"2017-01-30 20:26:12" 
} 

を得るが、私は何を期待することだけ持って

user: { 
    created_at: "2017-01-30 20:26:12" 
    email:"[email protected]" 
    id:"4b83e031-e8c8-4050-963d-446cb383fb14" 
    name:"testing" 
    role_id:"83eee2e0-8939-48f7-9fbc-1c077e2265e5" 
    role_name:"user" 
    updated_at:"2017-01-30 20:26:12" 
} 

ので、午前にありますいいえこれが正常な動作かバグか、何か不足しているのであれば確かめてください。

  • Laravelのバージョン5.3.30
+0

あなたは$ userをどのように取得していますか? – Vikash

+0

これは作成されたユーザーの返されたオブジェクトです。$ user = User :: create([...]); ' – ctf0

答えて

2

これが起こっている理由はここに、以下の

public function getRoleNameAttribute() 
{ 
    return $this->role->type; 
} 

問題であるあなたが$this->roleを言うとき、それは自動的に関係が添付されますされますモデル。これを防ぐには、$this->role()のようにメソッドに直接アクセスできる必要があります。

public function getRoleNameAttribute() 
{ 
    return $this->role()->first()->type; 
} 
+0

最初に' Undefined property:Illuminate \ Database \ Eloquent \ Relations \ BelongsTo :: $ type '、2番目は期待通りに働いた – ctf0

関連する問題