我有兩種模式:User
和Group
。一個user
可以只是一個group
一員,和group
可以有多個users
:Laravel雄辯的關係數據隱藏在迴應中
用戶:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $table = 'user';
protected $primaryKey = 'user_id';
protected $fillable = [];
protected $visible = ['user_id', 'name', 'points', 'group_id', 'profile'];
/**
* Get group where user belongs to
*/
public function group()
{
return $this->belongsTo('App\Models\Group', 'group_id', 'group_id');
}
}
組:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Group extends Model
{
protected $table = 'group';
protected $primaryKey = 'group_id';
protected $fillable = [];
protected $visible = ['group_id', 'name', 'profile'];
/**
* Get all group users.
*/
public function users()
{
return $this->hasMany('App\Models\User', 'group_id', 'group_id');
}
}
現在在我的控制器,我想檢索用戶數據和用戶的組數據。所以我用這個:
$users = User::with('group')
->orderBy('points', 'DESC')
->take(50)
->get();
return response()->json($users);
到目前爲止好。我期望上述返回像這樣:
[
{
"user_id": 27,
"name": "linnie15",
"points": 18565,
"group_id": 6,
"profile": null,
"group": {
"group_id": 6,
"name": "White Wall",
"profile": "Et tempore voluptatibus sunt ratione ut. Eum sint mollitia omnis eius ut facilis aut. Sed quisquam quis velit qui sint soluta. Autem quia ipsam esse sapiente delectus vel."
}
},
]
但是,這裏是問題所在。它唯一返回的是:
[
{
"user_id": 27,
"name": "linnie15",
"points": 18565,
"group_id": 6,
"profile": null
},
]
這怎麼可能?實際上,我找到了解決辦法,在User
模型中加入'group'
到$visible
陣列。但爲什麼呢?我的意思是,我真的應該把所有的關係加到$visible
陣列上嗎?爲什麼這是必要的。如果你查詢一段關係,你總是想要結果,不是嗎?
的'$ visible'屬性顯式白名單可以顯示哪些數據。任何不在其中的東西都不會顯示。如果你想要默認顯示所有東西(包括relatinships),只隱藏某些東西,你應該定義一個'$ hidden'屬性。 – David
如果你想更深入地控制你的JSON響應,請看分形(https://github.com/thephpleague/fractal) – Vuldo